diff --git a/lib/mom/instruction/truth_check.rb b/lib/mom/instruction/truth_check.rb index 4c0c8b07..0e8bcbd3 100644 --- a/lib/mom/instruction/truth_check.rb +++ b/lib/mom/instruction/truth_check.rb @@ -14,6 +14,10 @@ module Mom raise "condition must be slot_definition #{condition}" unless condition.is_a?(SlotDefinition) end + def to_s + "TruthCheck #{@condition} -> #{false_jump}" + end + def to_risc(compiler) false_label = @false_jump.to_risc(compiler) left = @condition.to_register(compiler,self) diff --git a/test/risc/interpreter/test_while_count.rb b/test/risc/interpreter/test_while_count.rb new file mode 100644 index 00000000..1f99bdc2 --- /dev/null +++ b/test/risc/interpreter/test_while_count.rb @@ -0,0 +1,59 @@ +require_relative "helper" + +module Risc + class InterpreterWhileCount < MiniTest::Test + include Ticker + + def setup + @string_input = as_main 'a = 0; while( 0 > a); a = 1 + a;end;return a' + super + end + + def test_if + #show_main_ticks # get output of what is in main + check_main_chain [Label, LoadConstant, SlotToReg, RegToSlot, Label, + LoadConstant, LoadConstant, SlotToReg, RegToSlot, RegToSlot, + SlotToReg, SlotToReg, RegToSlot, SlotToReg, SlotToReg, + RegToSlot, SlotToReg, RegToSlot, SlotToReg, RegToSlot, + LoadConstant, SlotToReg, RegToSlot, SlotToReg, SlotToReg, + SlotToReg, SlotToReg, RegToSlot, LoadConstant, SlotToReg, + RegToSlot, SlotToReg, LoadConstant, FunctionCall, Label, + SlotToReg, SlotToReg, SlotToReg, SlotToReg, SlotToReg, + OperatorInstruction, IsMinus, LoadConstant, Branch, Label, + RegToSlot, SlotToReg, SlotToReg, RegToSlot, SlotToReg, + SlotToReg, FunctionReturn, SlotToReg, SlotToReg, RegToSlot, + SlotToReg, SlotToReg, LoadConstant, OperatorInstruction, IsZero, + LoadConstant, OperatorInstruction, IsZero, LoadConstant, LoadConstant, + SlotToReg, RegToSlot, RegToSlot, SlotToReg, SlotToReg, + RegToSlot, SlotToReg, SlotToReg, RegToSlot, SlotToReg, + RegToSlot, SlotToReg, RegToSlot, LoadConstant, SlotToReg, + RegToSlot, SlotToReg, SlotToReg, SlotToReg, SlotToReg, + RegToSlot, LoadConstant, SlotToReg, RegToSlot, SlotToReg, + LoadConstant, FunctionCall, Label, SlotToReg, SlotToReg, + SlotToReg, SlotToReg, SlotToReg, OperatorInstruction, LoadConstant, + SlotToReg, SlotToReg, RegToSlot, RegToSlot, RegToSlot, + SlotToReg, SlotToReg, RegToSlot, SlotToReg, SlotToReg, + FunctionReturn, SlotToReg, SlotToReg, RegToSlot, Branch, + Label, LoadConstant, LoadConstant, SlotToReg, RegToSlot, + RegToSlot, SlotToReg, SlotToReg, RegToSlot, SlotToReg, + SlotToReg, RegToSlot, SlotToReg, RegToSlot, SlotToReg, + RegToSlot, LoadConstant, SlotToReg, RegToSlot, SlotToReg, + SlotToReg, SlotToReg, SlotToReg, RegToSlot, LoadConstant, + SlotToReg, RegToSlot, SlotToReg, LoadConstant, FunctionCall, + Label, SlotToReg, SlotToReg, SlotToReg, SlotToReg, + SlotToReg, OperatorInstruction, IsMinus, Label, LoadConstant, + Label, RegToSlot, SlotToReg, SlotToReg, RegToSlot, + SlotToReg, SlotToReg, FunctionReturn, SlotToReg, SlotToReg, + RegToSlot, SlotToReg, SlotToReg, LoadConstant, OperatorInstruction, + IsZero, Label, SlotToReg, SlotToReg, RegToSlot, + SlotToReg, SlotToReg, RegToSlot, SlotToReg, SlotToReg, + FunctionReturn, Transfer, Syscall, NilClass] + assert_kind_of Parfait::Integer , get_return + assert_equal 1 , get_return.value + end + def test_exit + done = main_ticks(183) + assert_equal Syscall , done.class + end + end +end