diff --git a/lib/parfait/binary_code.rb b/lib/parfait/binary_code.rb index 823daf00..6143e375 100644 --- a/lib/parfait/binary_code.rb +++ b/lib/parfait/binary_code.rb @@ -26,7 +26,7 @@ module Parfait def extend_one() @next = BinaryCode.new(1) if Risc::Position.set?(self) - Risc::Position.log.debug "extending #{total_size - data_length} in #{self}" + Risc::Position.log.debug "extending one in #{self}" my_pos = Risc::Position.get(self) Risc::Position.reset(my_pos , my_pos.at) end diff --git a/lib/risc/interpreter.rb b/lib/risc/interpreter.rb index cff7cda2..11e1af85 100644 --- a/lib/risc/interpreter.rb +++ b/lib/risc/interpreter.rb @@ -48,6 +48,7 @@ module Risc def set_pc( pos ) raise "Not int #{pos}" unless pos.is_a? Numeric position = Position.at(pos) + raise "No position #{pos}" unless position if position.is_a?(Position::CodePosition) log.debug "Setting Position #{clock}-#{position}, #{position.method}" return set_pc(position.at + Parfait::BinaryCode.offset) @@ -114,7 +115,7 @@ module Risc # Instruction interpretation starts here def execute_DynamicJump method = get_register(@instruction.register) - set_instruction( method.risc_instructions ) + set_pc( Position.get(method.cpu_instructions).at ) false end def execute_Branch diff --git a/test/arm/helper.rb b/test/arm/helper.rb index ab2ecf77..ca21628e 100644 --- a/test/arm/helper.rb +++ b/test/arm/helper.rb @@ -9,11 +9,15 @@ module Arm def byte_length 4 end + def is_a?(_) + true + end end module ArmHelper def setup @machine = Arm::ArmMachine @binary = FakeBin.new + Risc::Position.clear_positions Risc::Position.set(@binary , 0) end diff --git a/test/arm/test_logic.rb b/test/arm/test_logic.rb index 14f785a7..03cfcccc 100644 --- a/test/arm/test_logic.rb +++ b/test/arm/test_logic.rb @@ -82,7 +82,7 @@ module Arm end def test_too_big_add code = @machine.add :r1 , :r1, 0x222 - Risc::Position.set(code,0,@binary) + Risc::Position.set(code,0,nil) # add 0x02 (first instruction) and then 0x220 shifted assert_code code , :add , [0x02,0x1c,0x91,0xe2] #e2 91 1e 02 # added extra instruction to add "extra" diff --git a/test/arm/test_move.rb b/test/arm/test_move.rb index 1b3fac07..85aca28a 100644 --- a/test/arm/test_move.rb +++ b/test/arm/test_move.rb @@ -22,7 +22,7 @@ module Arm end def test_mov_big code = @machine.mov :r0, 0x222 # is not 8 bit and can't be rotated by the arm system in one instruction - Risc::Position.set(code,0,@binary) + Risc::Position.set(code,0, nil) # mov 512(0x200) = e3 a0 0c 02 add 34(0x22) = e2 90 00 22 assert_code code , :mov , [ 0x02,0x0c,0xb0,0xe3] assert_code code.next , :add , [ 0x22,0x00,0x90,0xe2] diff --git a/test/risc/interpreter/assign/test_assign_local.rb b/test/risc/interpreter/assign/test_assign_local.rb index 866c9a3d..7ebe6897 100644 --- a/test/risc/interpreter/assign/test_assign_local.rb +++ b/test/risc/interpreter/assign/test_assign_local.rb @@ -9,38 +9,37 @@ module Risc super end - def pest_chain + def test_chain #show_main_ticks # get output of what is - check_main_chain [Label, LoadConstant, SlotToReg, RegToSlot, SlotToReg, - SlotToReg , RegToSlot, SlotToReg, SlotToReg, RegToSlot, - SlotToReg, SlotToReg, FunctionReturn, Transfer, Syscall, - NilClass] + check_main_chain [LoadConstant, SlotToReg, RegToSlot, SlotToReg, SlotToReg, + RegToSlot, SlotToReg, SlotToReg, RegToSlot, SlotToReg, + SlotToReg, FunctionReturn, Transfer, Syscall, NilClass] assert_equal 15 , get_return.value end - def pest_call_main + def test_call_main call_ins = ticks(main_at) assert_equal FunctionCall , call_ins.class assert :main , call_ins.method.name end def test_load_15 - load_ins = main_ticks(2) + load_ins = main_ticks(1) assert_equal LoadConstant , load_ins.class assert_equal Parfait::Integer , @interpreter.get_register(load_ins.register).class assert_equal 15 , @interpreter.get_register(load_ins.register).value end - def pest_return - ret = main_ticks(13) + def test_return + ret = main_ticks(12) assert_equal FunctionReturn , ret.class link = @interpreter.get_register( ret.register ) assert_equal Label , link.class end - def pest_transfer - transfer = main_ticks(14) + def test_transfer + transfer = main_ticks(13) assert_equal Transfer , transfer.class end - def pest_sys - sys = main_ticks(15) + def test_sys + sys = main_ticks(14) assert_equal Syscall , sys.class end end diff --git a/test/risc/interpreter/assign/test_assign_return.rb b/test/risc/interpreter/assign/test_assign_return.rb index 6ea46b94..cd7ecb7e 100644 --- a/test/risc/interpreter/assign/test_assign_return.rb +++ b/test/risc/interpreter/assign/test_assign_return.rb @@ -11,19 +11,18 @@ module Risc def test_chain #show_main_ticks # get output of what is - check_main_chain [Label, LoadConstant, LoadConstant, SlotToReg, RegToSlot, - RegToSlot, SlotToReg, SlotToReg, RegToSlot, SlotToReg, - SlotToReg, RegToSlot, SlotToReg, RegToSlot, SlotToReg, - RegToSlot, LoadConstant, SlotToReg, RegToSlot, LoadConstant, - 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, SlotToReg, SlotToReg, RegToSlot, SlotToReg, + check_main_chain [LoadConstant, LoadConstant, SlotToReg, RegToSlot, RegToSlot, + SlotToReg, SlotToReg, RegToSlot, SlotToReg, SlotToReg, + RegToSlot, SlotToReg, RegToSlot, SlotToReg, RegToSlot, + LoadConstant, SlotToReg, RegToSlot, LoadConstant, SlotToReg, + SlotToReg, RegToSlot, LoadConstant, SlotToReg, RegToSlot, + SlotToReg, FunctionCall, SlotToReg, SlotToReg, SlotToReg, + SlotToReg, SlotToReg, OperatorInstruction, LoadConstant, SlotToReg, + SlotToReg, RegToSlot, RegToSlot, RegToSlot, SlotToReg, SlotToReg, RegToSlot, SlotToReg, SlotToReg, FunctionReturn, - Transfer, Syscall, NilClass] + SlotToReg, SlotToReg, RegToSlot, SlotToReg, SlotToReg, + RegToSlot, SlotToReg, SlotToReg, RegToSlot, SlotToReg, + SlotToReg, FunctionReturn, Transfer, Syscall, NilClass] assert_equal 10 , get_return.value end end diff --git a/test/risc/interpreter/assign/test_assign_thrice.rb b/test/risc/interpreter/assign/test_assign_thrice.rb index 677f6b3f..e866cd08 100644 --- a/test/risc/interpreter/assign/test_assign_thrice.rb +++ b/test/risc/interpreter/assign/test_assign_thrice.rb @@ -11,23 +11,22 @@ module Risc def test_chain #show_main_ticks # get output of what is - check_main_chain [Label, LoadConstant, SlotToReg, RegToSlot, 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, + check_main_chain [LoadConstant, SlotToReg, RegToSlot, LoadConstant, LoadConstant, + SlotToReg, RegToSlot, RegToSlot, SlotToReg, SlotToReg, RegToSlot, SlotToReg, SlotToReg, RegToSlot, SlotToReg, - SlotToReg, FunctionReturn, SlotToReg, SlotToReg, RegToSlot, - 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, + RegToSlot, SlotToReg, RegToSlot, LoadConstant, SlotToReg, + RegToSlot, SlotToReg, SlotToReg, SlotToReg, SlotToReg, + RegToSlot, LoadConstant, SlotToReg, RegToSlot, SlotToReg, + FunctionCall, SlotToReg, SlotToReg, SlotToReg, SlotToReg, + SlotToReg, OperatorInstruction, LoadConstant, SlotToReg, SlotToReg, + RegToSlot, RegToSlot, RegToSlot, SlotToReg, SlotToReg, + RegToSlot, SlotToReg, SlotToReg, FunctionReturn, SlotToReg, + SlotToReg, RegToSlot, 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, FunctionCall, SlotToReg, SlotToReg, SlotToReg, SlotToReg, SlotToReg, OperatorInstruction, LoadConstant, SlotToReg, SlotToReg, RegToSlot, RegToSlot, RegToSlot, SlotToReg, SlotToReg, RegToSlot, diff --git a/test/risc/interpreter/assign/test_assign_twice.rb b/test/risc/interpreter/assign/test_assign_twice.rb index 94e37043..c3cc98ee 100644 --- a/test/risc/interpreter/assign/test_assign_twice.rb +++ b/test/risc/interpreter/assign/test_assign_twice.rb @@ -11,20 +11,19 @@ module Risc def test_chain #show_main_ticks # get output of what is - check_main_chain [Label, LoadConstant, SlotToReg, RegToSlot, 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, + check_main_chain [LoadConstant, SlotToReg, RegToSlot, LoadConstant, LoadConstant, + SlotToReg, RegToSlot, RegToSlot, SlotToReg, SlotToReg, RegToSlot, SlotToReg, SlotToReg, RegToSlot, SlotToReg, - SlotToReg, FunctionReturn, SlotToReg, SlotToReg, RegToSlot, + RegToSlot, SlotToReg, RegToSlot, LoadConstant, SlotToReg, + RegToSlot, SlotToReg, SlotToReg, SlotToReg, SlotToReg, + RegToSlot, LoadConstant, SlotToReg, RegToSlot, SlotToReg, + FunctionCall, SlotToReg, SlotToReg, SlotToReg, SlotToReg, + SlotToReg, OperatorInstruction, LoadConstant, SlotToReg, SlotToReg, + RegToSlot, RegToSlot, RegToSlot, SlotToReg, SlotToReg, + RegToSlot, SlotToReg, SlotToReg, FunctionReturn, SlotToReg, + SlotToReg, RegToSlot, SlotToReg, SlotToReg, RegToSlot, SlotToReg, SlotToReg, RegToSlot, SlotToReg, SlotToReg, - RegToSlot, SlotToReg, SlotToReg, FunctionReturn, Transfer, - Syscall, NilClass] + FunctionReturn, Transfer, Syscall, NilClass] assert_equal 10 , get_return.value end end diff --git a/test/risc/interpreter/calling/test_div10.rb b/test/risc/interpreter/calling/test_div10.rb index 15d373b8..9076dcca 100644 --- a/test/risc/interpreter/calling/test_div10.rb +++ b/test/risc/interpreter/calling/test_div10.rb @@ -11,41 +11,40 @@ module Risc def test_chain #show_main_ticks # get output of what is - check_main_chain [Label, LoadConstant, LoadConstant, SlotToReg, RegToSlot, - RegToSlot, SlotToReg, SlotToReg, RegToSlot, SlotToReg, - SlotToReg, RegToSlot, SlotToReg, RegToSlot, SlotToReg, - RegToSlot, LoadConstant, SlotToReg, RegToSlot, LoadConstant, - SlotToReg, RegToSlot, SlotToReg, LoadConstant, FunctionCall, - Label, SlotToReg, SlotToReg, SlotToReg, SlotToReg, - SlotToReg, SlotToReg, LoadData, OperatorInstruction, LoadData, + check_main_chain [LoadConstant, LoadConstant, SlotToReg, RegToSlot, RegToSlot, + SlotToReg, SlotToReg, RegToSlot, SlotToReg, SlotToReg, + RegToSlot, SlotToReg, RegToSlot, SlotToReg, RegToSlot, + LoadConstant, SlotToReg, RegToSlot, LoadConstant, SlotToReg, + RegToSlot, SlotToReg, FunctionCall, SlotToReg, SlotToReg, + SlotToReg, SlotToReg, SlotToReg, SlotToReg, LoadData, + OperatorInstruction, LoadData, OperatorInstruction, OperatorInstruction, LoadData, + Transfer, OperatorInstruction, OperatorInstruction, LoadData, Transfer, OperatorInstruction, OperatorInstruction, LoadData, Transfer, OperatorInstruction, - OperatorInstruction, LoadData, Transfer, OperatorInstruction, OperatorInstruction, - LoadData, Transfer, OperatorInstruction, OperatorInstruction, LoadData, - OperatorInstruction, LoadData, Transfer, OperatorInstruction, OperatorInstruction, - Transfer, LoadData, OperatorInstruction, LoadData, OperatorInstruction, - OperatorInstruction, LoadConstant, SlotToReg, SlotToReg, RegToSlot, - RegToSlot, RegToSlot, SlotToReg, SlotToReg, RegToSlot, - SlotToReg, SlotToReg, FunctionReturn, SlotToReg, SlotToReg, - RegToSlot, SlotToReg, SlotToReg, RegToSlot, SlotToReg, + OperatorInstruction, LoadData, OperatorInstruction, LoadData, Transfer, + OperatorInstruction, OperatorInstruction, Transfer, LoadData, OperatorInstruction, + LoadData, OperatorInstruction, OperatorInstruction, LoadConstant, SlotToReg, + SlotToReg, RegToSlot, RegToSlot, RegToSlot, SlotToReg, SlotToReg, RegToSlot, SlotToReg, SlotToReg, FunctionReturn, - Transfer, Syscall, NilClass] + SlotToReg, SlotToReg, RegToSlot, SlotToReg, SlotToReg, + RegToSlot, SlotToReg, SlotToReg, RegToSlot, SlotToReg, + SlotToReg, FunctionReturn, Transfer, Syscall, NilClass] assert_equal Parfait::Integer , get_return.class assert_equal 2 , get_return.value end def test_load_25 - load_ins = main_ticks 17 + load_ins = main_ticks 16 assert_equal LoadConstant , load_ins.class assert_equal 25 , @interpreter.get_register(load_ins.register).value end def test_return - ret = main_ticks(73) + ret = main_ticks(70) assert_equal FunctionReturn , ret.class link = @interpreter.get_register( ret.register ) assert_equal Label , link.class end def test_sys - sys = main_ticks(87) + sys = main_ticks(84) assert_equal Syscall , sys.class assert_equal :exit , sys.name end diff --git a/test/risc/interpreter/calling/test_get_byte.rb b/test/risc/interpreter/calling/test_get_byte.rb index af7e4707..9c9269c7 100644 --- a/test/risc/interpreter/calling/test_get_byte.rb +++ b/test/risc/interpreter/calling/test_get_byte.rb @@ -10,29 +10,28 @@ module Risc end def test_chain #show_main_ticks # get output of what is - check_main_chain [Label, LoadConstant, LoadConstant, SlotToReg, RegToSlot, - RegToSlot, SlotToReg, SlotToReg, RegToSlot, SlotToReg, - SlotToReg, RegToSlot, SlotToReg, RegToSlot, SlotToReg, - RegToSlot, LoadConstant, SlotToReg, RegToSlot, LoadConstant, - SlotToReg, SlotToReg, RegToSlot, LoadConstant, SlotToReg, - RegToSlot, SlotToReg, LoadConstant, FunctionCall, Label, - SlotToReg, SlotToReg, SlotToReg, SlotToReg, ByteToReg, - LoadConstant, SlotToReg, SlotToReg, RegToSlot, RegToSlot, - RegToSlot, SlotToReg, SlotToReg, RegToSlot, SlotToReg, - SlotToReg, FunctionReturn, SlotToReg, SlotToReg, RegToSlot, + check_main_chain [LoadConstant, LoadConstant, SlotToReg, RegToSlot, RegToSlot, SlotToReg, SlotToReg, RegToSlot, SlotToReg, SlotToReg, - RegToSlot, SlotToReg, SlotToReg, FunctionReturn, Transfer, - Syscall, NilClass] + RegToSlot, SlotToReg, RegToSlot, SlotToReg, RegToSlot, + LoadConstant, SlotToReg, RegToSlot, LoadConstant, SlotToReg, + SlotToReg, RegToSlot, LoadConstant, SlotToReg, RegToSlot, + SlotToReg, FunctionCall, SlotToReg, SlotToReg, SlotToReg, + SlotToReg, ByteToReg, LoadConstant, SlotToReg, SlotToReg, + RegToSlot, RegToSlot, RegToSlot, SlotToReg, SlotToReg, + RegToSlot, SlotToReg, SlotToReg, FunctionReturn, SlotToReg, + SlotToReg, RegToSlot, SlotToReg, SlotToReg, RegToSlot, + SlotToReg, SlotToReg, RegToSlot, SlotToReg, SlotToReg, + FunctionReturn, Transfer, Syscall, NilClass] assert_equal Parfait::Integer , get_return.class assert_equal "H".ord , get_return.value end def test_exit - done = main_ticks(61) + done = main_ticks(58) assert_equal Syscall , done.class end def test_byte_to_reg - done = main_ticks(35) + done = main_ticks(32) assert_equal ByteToReg , done.class assert_equal "H".ord , @interpreter.get_register(done.register) end diff --git a/test/risc/interpreter/calling/test_minus.rb b/test/risc/interpreter/calling/test_minus.rb index 15a9d816..a970f37e 100644 --- a/test/risc/interpreter/calling/test_minus.rb +++ b/test/risc/interpreter/calling/test_minus.rb @@ -11,30 +11,29 @@ module Risc def test_minus #show_main_ticks # get output of what is - check_main_chain [Label, LoadConstant, LoadConstant, SlotToReg, RegToSlot, - RegToSlot, SlotToReg, SlotToReg, RegToSlot, SlotToReg, - SlotToReg, RegToSlot, SlotToReg, RegToSlot, SlotToReg, - RegToSlot, LoadConstant, SlotToReg, RegToSlot, LoadConstant, - 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, SlotToReg, SlotToReg, RegToSlot, SlotToReg, + check_main_chain [LoadConstant, LoadConstant, SlotToReg, RegToSlot, RegToSlot, + SlotToReg, SlotToReg, RegToSlot, SlotToReg, SlotToReg, + RegToSlot, SlotToReg, RegToSlot, SlotToReg, RegToSlot, + LoadConstant, SlotToReg, RegToSlot, LoadConstant, SlotToReg, + SlotToReg, RegToSlot, LoadConstant, SlotToReg, RegToSlot, + SlotToReg, FunctionCall, SlotToReg, SlotToReg, SlotToReg, + SlotToReg, SlotToReg, OperatorInstruction, LoadConstant, SlotToReg, + SlotToReg, RegToSlot, RegToSlot, RegToSlot, SlotToReg, SlotToReg, RegToSlot, SlotToReg, SlotToReg, FunctionReturn, - Transfer, Syscall, NilClass] + SlotToReg, SlotToReg, RegToSlot, SlotToReg, SlotToReg, + RegToSlot, SlotToReg, SlotToReg, RegToSlot, SlotToReg, + SlotToReg, FunctionReturn, Transfer, Syscall, NilClass] assert_equal Parfait::Integer , get_return.class assert_equal 1 , get_return.value end def test_load_5 - lod = main_ticks( 20 ) + lod = main_ticks( 19 ) assert_equal LoadConstant , lod.class assert_equal Parfait::Integer , lod.constant.class assert_equal 5 , lod.constant.value end def test_op - op = main_ticks(36) + op = main_ticks(33) assert_equal OperatorInstruction , op.class assert_equal :r1 , op.left.symbol assert_equal :r2 , op.right.symbol @@ -42,7 +41,7 @@ module Risc assert_equal 1 , @interpreter.get_register(:r1) end def test_sys - sys = main_ticks(62) + sys = main_ticks(59) assert_equal Syscall , sys.class assert_equal :exit , sys.name end diff --git a/test/risc/interpreter/calling/test_mod.rb b/test/risc/interpreter/calling/test_mod.rb index 4c33acb2..5ba674db 100644 --- a/test/risc/interpreter/calling/test_mod.rb +++ b/test/risc/interpreter/calling/test_mod.rb @@ -11,29 +11,28 @@ module Risc def test_chain #show_main_ticks # get output of what is - check_main_chain [Label, LoadConstant, LoadConstant, SlotToReg, RegToSlot, - RegToSlot, SlotToReg, SlotToReg, RegToSlot, SlotToReg, - SlotToReg, RegToSlot, SlotToReg, RegToSlot, SlotToReg, - RegToSlot, LoadConstant, SlotToReg, RegToSlot, LoadConstant, - SlotToReg, RegToSlot, SlotToReg, LoadConstant, FunctionCall, - Label, SlotToReg, SlotToReg, LoadData, OperatorInstruction, - LoadConstant, SlotToReg, SlotToReg, RegToSlot, RegToSlot, - RegToSlot, SlotToReg, SlotToReg, RegToSlot, SlotToReg, - SlotToReg, FunctionReturn, SlotToReg, SlotToReg, RegToSlot, + check_main_chain [LoadConstant, LoadConstant, SlotToReg, RegToSlot, RegToSlot, SlotToReg, SlotToReg, RegToSlot, SlotToReg, SlotToReg, - RegToSlot, SlotToReg, SlotToReg, FunctionReturn, Transfer, - Syscall, NilClass] + RegToSlot, SlotToReg, RegToSlot, SlotToReg, RegToSlot, + LoadConstant, SlotToReg, RegToSlot, LoadConstant, SlotToReg, + RegToSlot, SlotToReg, FunctionCall, SlotToReg, SlotToReg, + LoadData, OperatorInstruction, LoadConstant, SlotToReg, SlotToReg, + RegToSlot, RegToSlot, RegToSlot, SlotToReg, SlotToReg, + RegToSlot, SlotToReg, SlotToReg, FunctionReturn, SlotToReg, + SlotToReg, RegToSlot, SlotToReg, SlotToReg, RegToSlot, + SlotToReg, SlotToReg, RegToSlot, SlotToReg, SlotToReg, + FunctionReturn, Transfer, Syscall, NilClass] assert_equal Parfait::Integer , get_return.class assert_equal 2 , get_return.value end def test_load - lod = main_ticks(17) + lod = main_ticks(16) assert_equal LoadConstant , lod.class assert_equal 9 , lod.constant.value end def test_fix # reduce self to fix - sl = main_ticks(28) + sl = main_ticks(25) assert_equal SlotToReg , sl.class assert_equal :r1 , sl.array.symbol assert_equal 3 , sl.index @@ -42,7 +41,7 @@ module Risc end def test_sys - sys = main_ticks(56) + sys = main_ticks(53) assert_equal Syscall , sys.class assert_equal :exit , sys.name end diff --git a/test/risc/interpreter/calling/test_mult.rb b/test/risc/interpreter/calling/test_mult.rb index acfb7626..acd8a5b6 100644 --- a/test/risc/interpreter/calling/test_mult.rb +++ b/test/risc/interpreter/calling/test_mult.rb @@ -11,24 +11,23 @@ module Risc def test_mult #show_main_ticks # get output of what is - check_main_chain [Label, LoadConstant, LoadConstant, SlotToReg, RegToSlot, - RegToSlot, SlotToReg, SlotToReg, RegToSlot, SlotToReg, - SlotToReg, RegToSlot, SlotToReg, RegToSlot, SlotToReg, - RegToSlot, LoadConstant, SlotToReg, RegToSlot, LoadConstant, - 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, SlotToReg, SlotToReg, RegToSlot, SlotToReg, + check_main_chain [LoadConstant, LoadConstant, SlotToReg, RegToSlot, RegToSlot, + SlotToReg, SlotToReg, RegToSlot, SlotToReg, SlotToReg, + RegToSlot, SlotToReg, RegToSlot, SlotToReg, RegToSlot, + LoadConstant, SlotToReg, RegToSlot, LoadConstant, SlotToReg, + SlotToReg, RegToSlot, LoadConstant, SlotToReg, RegToSlot, + SlotToReg, FunctionCall, SlotToReg, SlotToReg, SlotToReg, + SlotToReg, SlotToReg, OperatorInstruction, LoadConstant, SlotToReg, + SlotToReg, RegToSlot, RegToSlot, RegToSlot, SlotToReg, SlotToReg, RegToSlot, SlotToReg, SlotToReg, FunctionReturn, - Transfer, Syscall, NilClass] + SlotToReg, SlotToReg, RegToSlot, SlotToReg, SlotToReg, + RegToSlot, SlotToReg, SlotToReg, RegToSlot, SlotToReg, + SlotToReg, FunctionReturn, Transfer, Syscall, NilClass] assert_equal Parfait::Integer , get_return.class assert_equal 0 , get_return.value end def test_op - op = main_ticks(36) + op = main_ticks(33) assert_equal OperatorInstruction , op.class assert_equal :r1 , op.left.symbol assert_equal :r2 , op.right.symbol diff --git a/test/risc/interpreter/calling/test_plus.rb b/test/risc/interpreter/calling/test_plus.rb index 9c5d8f21..880b9681 100644 --- a/test/risc/interpreter/calling/test_plus.rb +++ b/test/risc/interpreter/calling/test_plus.rb @@ -9,60 +9,62 @@ module Risc super end - def test_add + def pest_add #show_main_ticks # get output of what is - check_main_chain [Label, LoadConstant, LoadConstant, SlotToReg, RegToSlot, - RegToSlot, SlotToReg, SlotToReg, RegToSlot, SlotToReg, - SlotToReg, RegToSlot, SlotToReg, RegToSlot, SlotToReg, - RegToSlot, LoadConstant, SlotToReg, RegToSlot, LoadConstant, - 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, SlotToReg, SlotToReg, RegToSlot, SlotToReg, + check_main_chain [LoadConstant, LoadConstant, SlotToReg, RegToSlot, RegToSlot, + SlotToReg, SlotToReg, RegToSlot, SlotToReg, SlotToReg, + RegToSlot, SlotToReg, RegToSlot, SlotToReg, RegToSlot, + LoadConstant, SlotToReg, RegToSlot, LoadConstant, SlotToReg, + SlotToReg, RegToSlot, LoadConstant, SlotToReg, RegToSlot, + SlotToReg, FunctionCall, SlotToReg, SlotToReg, SlotToReg, + SlotToReg, SlotToReg, OperatorInstruction, LoadConstant, SlotToReg, + SlotToReg, RegToSlot, RegToSlot, RegToSlot, SlotToReg, SlotToReg, RegToSlot, SlotToReg, SlotToReg, FunctionReturn, - Transfer, Syscall, NilClass] + SlotToReg, SlotToReg, RegToSlot, SlotToReg, SlotToReg, + RegToSlot, SlotToReg, SlotToReg, RegToSlot, SlotToReg, + SlotToReg, FunctionReturn, Transfer, Syscall, NilClass] assert_equal Parfait::Integer , get_return.class assert_equal 10 , get_return.value end def test_load_5 - lod = main_ticks( 20 ) + lod = main_ticks( 19 ) assert_equal LoadConstant , lod.class assert_equal Parfait::Integer , lod.constant.class assert_equal 5 , lod.constant.value end + def base + 28 + end def test_slot_receiver #load receiver from message - sl = main_ticks( 31 ) + sl = main_ticks( base ) assert_equal SlotToReg , sl.class assert_equal :r0 , sl.array.symbol #load from message assert_equal 2 , sl.index assert_equal :r1 , sl.register.symbol end def test_slot_args #load args from message - sl = main_ticks( 32 ) + sl = main_ticks( base + 1 ) assert_equal SlotToReg , sl.class assert_equal :r0 , sl.array.symbol #load from message assert_equal 8 , sl.index assert_equal :r2 , sl.register.symbol end def test_slot_arg #load arg 1, destructively from args - sl = main_ticks( 33 ) + sl = main_ticks( base + 2 ) assert_equal SlotToReg , sl.class assert_equal :r2 , sl.array.symbol #load from message assert_equal 1 , sl.index assert_equal :r2 , sl.register.symbol end def test_slot_int1 #load int from object - sl = main_ticks( 34 ) + sl = main_ticks( base + 3 ) assert_equal SlotToReg , sl.class assert_equal :r1 , sl.array.symbol #load from message assert_equal 3 , sl.index assert_equal :r1 , sl.register.symbol end def test_op - op = main_ticks(36) + op = main_ticks(base + 5) assert_equal OperatorInstruction , op.class assert_equal :r1 , op.left.symbol assert_equal :r2 , op.right.symbol @@ -70,13 +72,13 @@ module Risc assert_equal 10 , @interpreter.get_register(:r1) end def test_load_int_space - cons = main_ticks(37) + cons = main_ticks(base + 6) assert_equal LoadConstant , cons.class assert_equal Parfait::Space , cons.constant.class assert_equal :r3 , cons.register.symbol end def test_load_int_next_space - sl = main_ticks(38) + sl = main_ticks(base + 7) assert_equal SlotToReg , sl.class assert_equal :r3 , sl.array.symbol #load from space assert_equal 4 , sl.index @@ -84,7 +86,7 @@ module Risc assert_equal Parfait::Integer , @interpreter.get_register(:r2).class end def test_load_int_next_int - sl = main_ticks(39) + sl = main_ticks(base + 8) assert_equal SlotToReg , sl.class assert_equal :r2 , sl.array.symbol #load from next_int assert_equal 1 , sl.index @@ -92,14 +94,14 @@ module Risc assert_equal Parfait::Integer , @interpreter.get_register(:r4).class end def test_load_int_next_int2 - sl = main_ticks(40) + sl = main_ticks(base + 9) assert_equal RegToSlot , sl.class assert_equal :r3 , sl.array.symbol #store to space assert_equal 4 , sl.index assert_equal :r4 , sl.register.symbol end def test_sys - sys = main_ticks(62) + sys = main_ticks(59) assert_equal Syscall , sys.class assert_equal :exit , sys.name end diff --git a/test/risc/interpreter/calling/test_puts.rb b/test/risc/interpreter/calling/test_puts.rb index 75141019..ca7f234d 100644 --- a/test/risc/interpreter/calling/test_puts.rb +++ b/test/risc/interpreter/calling/test_puts.rb @@ -11,30 +11,30 @@ module Risc def test_chain #show_main_ticks # get output of what is - check_main_chain [Label, LoadConstant, LoadConstant, SlotToReg, RegToSlot, - RegToSlot, SlotToReg, SlotToReg, RegToSlot, SlotToReg, - SlotToReg, RegToSlot, SlotToReg, RegToSlot, SlotToReg, - RegToSlot, LoadConstant, SlotToReg, RegToSlot, LoadConstant, - SlotToReg, RegToSlot, SlotToReg, LoadConstant, FunctionCall, - Label, SlotToReg, SlotToReg, Transfer, Syscall, - Transfer, Transfer, LoadConstant, SlotToReg, SlotToReg, - RegToSlot, RegToSlot, RegToSlot, SlotToReg, SlotToReg, - RegToSlot, SlotToReg, SlotToReg, FunctionReturn, SlotToReg, - SlotToReg, RegToSlot, SlotToReg, SlotToReg, RegToSlot, + check_main_chain [LoadConstant, LoadConstant, SlotToReg, RegToSlot, RegToSlot, SlotToReg, SlotToReg, RegToSlot, SlotToReg, SlotToReg, - FunctionReturn, Transfer, Syscall, NilClass] + RegToSlot, SlotToReg, RegToSlot, SlotToReg, RegToSlot, + LoadConstant, SlotToReg, RegToSlot, LoadConstant, SlotToReg, + RegToSlot, SlotToReg, FunctionCall, SlotToReg, SlotToReg, + Transfer, Syscall, Transfer, Transfer, LoadConstant, + SlotToReg, SlotToReg, RegToSlot, RegToSlot, RegToSlot, + SlotToReg, SlotToReg, RegToSlot, SlotToReg, SlotToReg, + FunctionReturn, SlotToReg, SlotToReg, RegToSlot, SlotToReg, + SlotToReg, RegToSlot, SlotToReg, SlotToReg, RegToSlot, + SlotToReg, SlotToReg, FunctionReturn, Transfer, Syscall, + NilClass] assert_equal "Hello again" , @interpreter.stdout assert_equal Parfait::Integer , get_return.class assert_equal 11 , get_return.value #bytes written end def test_call - cal = main_ticks(25) + cal = main_ticks(23) assert_equal FunctionCall , cal.class assert_equal :putstring , cal.method.name end def test_putstring_sys - done = main_ticks(30) + done = main_ticks(27) assert_equal Syscall , done.class assert_equal "Hello again" , @interpreter.stdout assert_equal 11 , @interpreter.get_register(:r0) @@ -42,28 +42,28 @@ module Risc assert_equal "Hello again" , @interpreter.get_register(:r1).to_string end def test_move_sys_return - sl = main_ticks(31) + sl = main_ticks(28) assert_equal Transfer , sl.class assert_equal :r0 , sl.from.symbol assert_equal :r1 , sl.to.symbol assert_equal 11 , @interpreter.get_register(:r1) end def test_restore_message - sl = main_ticks(32) + sl = main_ticks(29) assert_equal Transfer , sl.class assert_equal :r8 , sl.from.symbol assert_equal :r0 , sl.to.symbol assert_equal Parfait::Message , @interpreter.get_register(:r0).class end def test_save_sys_return - sl = main_ticks(37) + sl = main_ticks(34) assert_equal RegToSlot , sl.class assert_equal :r1 , sl.register.symbol #return assert_equal :r2 , sl.array.symbol #parfait integer assert_equal 3 , sl.index end def test_return - done = main_ticks(44) + done = main_ticks(41) assert_equal FunctionReturn , done.class end diff --git a/test/risc/interpreter/calling/test_set_byte.rb b/test/risc/interpreter/calling/test_set_byte.rb index 78f20e80..5a66e65a 100644 --- a/test/risc/interpreter/calling/test_set_byte.rb +++ b/test/risc/interpreter/calling/test_set_byte.rb @@ -11,29 +11,29 @@ module Risc def test_chain #show_main_ticks # get output of what is - check_main_chain [Label, LoadConstant, LoadConstant, SlotToReg, RegToSlot, - RegToSlot, SlotToReg, SlotToReg, RegToSlot, SlotToReg, - SlotToReg, RegToSlot, SlotToReg, RegToSlot, SlotToReg, - RegToSlot, LoadConstant, SlotToReg, RegToSlot, LoadConstant, - SlotToReg, SlotToReg, RegToSlot, LoadConstant, SlotToReg, - SlotToReg, RegToSlot, LoadConstant, SlotToReg, RegToSlot, - SlotToReg, LoadConstant, FunctionCall, Label, SlotToReg, - SlotToReg, SlotToReg, SlotToReg, SlotToReg, SlotToReg, - SlotToReg, RegToByte, RegToSlot, SlotToReg, SlotToReg, - RegToSlot, SlotToReg, SlotToReg, FunctionReturn, SlotToReg, - SlotToReg, RegToSlot, SlotToReg, SlotToReg, RegToSlot, + check_main_chain [LoadConstant, LoadConstant, SlotToReg, RegToSlot, RegToSlot, SlotToReg, SlotToReg, RegToSlot, SlotToReg, SlotToReg, - FunctionReturn, Transfer, Syscall, NilClass] + RegToSlot, SlotToReg, RegToSlot, SlotToReg, RegToSlot, + LoadConstant, SlotToReg, RegToSlot, LoadConstant, SlotToReg, + SlotToReg, RegToSlot, LoadConstant, SlotToReg, SlotToReg, + RegToSlot, LoadConstant, SlotToReg, RegToSlot, SlotToReg, + FunctionCall, SlotToReg, SlotToReg, SlotToReg, SlotToReg, + SlotToReg, SlotToReg, SlotToReg, RegToByte, RegToSlot, + SlotToReg, SlotToReg, RegToSlot, SlotToReg, SlotToReg, + FunctionReturn, SlotToReg, SlotToReg, RegToSlot, SlotToReg, + SlotToReg, RegToSlot, SlotToReg, SlotToReg, RegToSlot, + SlotToReg, SlotToReg, FunctionReturn, Transfer, Syscall, + NilClass] assert_equal Parfait::Word , get_return.class assert_equal "Kello" , get_return.to_string end def test_reg_to_byte - done = main_ticks(42) + done = main_ticks(39) assert_equal RegToByte , done.class assert_equal "K".ord , @interpreter.get_register(done.register) end def test_exit - done = main_ticks(63) + done = main_ticks(60) assert_equal Syscall , done.class end diff --git a/test/risc/interpreter/conditional/test_if_greater.rb b/test/risc/interpreter/conditional/test_if_greater.rb index 339532e3..e7f688e2 100644 --- a/test/risc/interpreter/conditional/test_if_greater.rb +++ b/test/risc/interpreter/conditional/test_if_greater.rb @@ -11,25 +11,24 @@ module Risc def test_if #show_main_ticks # get output of what is in main - check_main_chain [Label, LoadConstant, LoadConstant, SlotToReg, RegToSlot, - RegToSlot, SlotToReg, SlotToReg, RegToSlot, SlotToReg, - SlotToReg, RegToSlot, SlotToReg, RegToSlot, SlotToReg, - RegToSlot, LoadConstant, SlotToReg, RegToSlot, LoadConstant, - SlotToReg, SlotToReg, RegToSlot, LoadConstant, SlotToReg, - RegToSlot, SlotToReg, LoadConstant, FunctionCall, Label, - SlotToReg, SlotToReg, SlotToReg, SlotToReg, SlotToReg, - OperatorInstruction, IsMinus, IsZero, Label, LoadConstant, - Label, RegToSlot, SlotToReg, SlotToReg, RegToSlot, + check_main_chain [LoadConstant, LoadConstant, SlotToReg, RegToSlot, RegToSlot, + SlotToReg, SlotToReg, RegToSlot, SlotToReg, SlotToReg, + RegToSlot, SlotToReg, RegToSlot, SlotToReg, RegToSlot, + LoadConstant, SlotToReg, RegToSlot, LoadConstant, SlotToReg, + SlotToReg, RegToSlot, LoadConstant, SlotToReg, RegToSlot, + SlotToReg, FunctionCall, SlotToReg, SlotToReg, SlotToReg, + SlotToReg, SlotToReg, OperatorInstruction, IsMinus, IsZero, + LoadConstant, RegToSlot, SlotToReg, SlotToReg, RegToSlot, SlotToReg, SlotToReg, FunctionReturn, SlotToReg, SlotToReg, RegToSlot, SlotToReg, SlotToReg, LoadConstant, OperatorInstruction, - IsZero, Label, LoadConstant, RegToSlot, SlotToReg, - SlotToReg, RegToSlot, SlotToReg, SlotToReg, FunctionReturn, - Transfer, Syscall, NilClass] + IsZero, LoadConstant, RegToSlot, SlotToReg, SlotToReg, + RegToSlot, SlotToReg, SlotToReg, FunctionReturn, Transfer, + Syscall, NilClass] assert_equal Parfait::Word , get_return.class assert_equal "else" , get_return.to_string end def test_exit - done = main_ticks(67) + done = main_ticks(61) assert_equal Syscall , done.class end end diff --git a/test/risc/interpreter/conditional/test_if_greater_or.rb b/test/risc/interpreter/conditional/test_if_greater_or.rb index b2e4a032..3722ab7c 100644 --- a/test/risc/interpreter/conditional/test_if_greater_or.rb +++ b/test/risc/interpreter/conditional/test_if_greater_or.rb @@ -11,25 +11,24 @@ module Risc def test_if #show_main_ticks # get output of what is in main - check_main_chain [Label, LoadConstant, LoadConstant, SlotToReg, RegToSlot, - RegToSlot, SlotToReg, SlotToReg, RegToSlot, SlotToReg, - SlotToReg, RegToSlot, SlotToReg, RegToSlot, SlotToReg, - RegToSlot, LoadConstant, SlotToReg, RegToSlot, LoadConstant, - 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, Label, LoadConstant, + check_main_chain [LoadConstant, LoadConstant, SlotToReg, RegToSlot, RegToSlot, + SlotToReg, SlotToReg, RegToSlot, SlotToReg, SlotToReg, + RegToSlot, SlotToReg, RegToSlot, SlotToReg, RegToSlot, + LoadConstant, SlotToReg, RegToSlot, LoadConstant, SlotToReg, + SlotToReg, RegToSlot, LoadConstant, SlotToReg, RegToSlot, + SlotToReg, FunctionCall, SlotToReg, SlotToReg, SlotToReg, + SlotToReg, SlotToReg, OperatorInstruction, IsMinus, LoadConstant, + Branch, RegToSlot, SlotToReg, SlotToReg, RegToSlot, + SlotToReg, SlotToReg, FunctionReturn, SlotToReg, SlotToReg, + RegToSlot, SlotToReg, SlotToReg, LoadConstant, OperatorInstruction, + IsZero, LoadConstant, OperatorInstruction, IsZero, LoadConstant, RegToSlot, SlotToReg, SlotToReg, RegToSlot, SlotToReg, SlotToReg, FunctionReturn, Transfer, Syscall, NilClass] assert_equal Parfait::Word , get_return.class assert_equal "then" , get_return.to_string end def test_exit - done = main_ticks(69) + done = main_ticks(64) assert_equal Syscall , done.class end end diff --git a/test/risc/interpreter/conditional/test_if_smaller.rb b/test/risc/interpreter/conditional/test_if_smaller.rb index 187a713d..e9468e56 100644 --- a/test/risc/interpreter/conditional/test_if_smaller.rb +++ b/test/risc/interpreter/conditional/test_if_smaller.rb @@ -11,25 +11,24 @@ module Risc def test_if #show_main_ticks # get output of what is in main - check_main_chain [Label, LoadConstant, LoadConstant, SlotToReg, RegToSlot, - RegToSlot, SlotToReg, SlotToReg, RegToSlot, SlotToReg, - SlotToReg, RegToSlot, SlotToReg, RegToSlot, SlotToReg, - RegToSlot, LoadConstant, SlotToReg, RegToSlot, LoadConstant, - SlotToReg, SlotToReg, RegToSlot, LoadConstant, SlotToReg, - RegToSlot, SlotToReg, LoadConstant, FunctionCall, Label, - SlotToReg, SlotToReg, SlotToReg, SlotToReg, SlotToReg, - OperatorInstruction, IsMinus, IsZero, Label, LoadConstant, - Label, RegToSlot, SlotToReg, SlotToReg, RegToSlot, + check_main_chain [LoadConstant, LoadConstant, SlotToReg, RegToSlot, RegToSlot, + SlotToReg, SlotToReg, RegToSlot, SlotToReg, SlotToReg, + RegToSlot, SlotToReg, RegToSlot, SlotToReg, RegToSlot, + LoadConstant, SlotToReg, RegToSlot, LoadConstant, SlotToReg, + SlotToReg, RegToSlot, LoadConstant, SlotToReg, RegToSlot, + SlotToReg, FunctionCall, SlotToReg, SlotToReg, SlotToReg, + SlotToReg, SlotToReg, OperatorInstruction, IsMinus, IsZero, + LoadConstant, RegToSlot, SlotToReg, SlotToReg, RegToSlot, SlotToReg, SlotToReg, FunctionReturn, SlotToReg, SlotToReg, RegToSlot, SlotToReg, SlotToReg, LoadConstant, OperatorInstruction, - IsZero, Label, LoadConstant, RegToSlot, SlotToReg, - SlotToReg, RegToSlot, SlotToReg, SlotToReg, FunctionReturn, - Transfer, Syscall, NilClass] + IsZero, LoadConstant, RegToSlot, SlotToReg, SlotToReg, + RegToSlot, SlotToReg, SlotToReg, FunctionReturn, Transfer, + Syscall, NilClass] assert_equal Parfait::Word , get_return.class assert_equal "else" , get_return.to_string end def test_exit - done = main_ticks(67) + done = main_ticks(61) assert_equal Syscall , done.class end end diff --git a/test/risc/interpreter/conditional/test_if_smaller_or.rb b/test/risc/interpreter/conditional/test_if_smaller_or.rb index 62b429a3..c94bbf81 100644 --- a/test/risc/interpreter/conditional/test_if_smaller_or.rb +++ b/test/risc/interpreter/conditional/test_if_smaller_or.rb @@ -11,25 +11,24 @@ module Risc def test_if #show_main_ticks # get output of what is in main - check_main_chain [Label, LoadConstant, LoadConstant, SlotToReg, RegToSlot, - RegToSlot, SlotToReg, SlotToReg, RegToSlot, SlotToReg, - SlotToReg, RegToSlot, SlotToReg, RegToSlot, SlotToReg, - RegToSlot, LoadConstant, SlotToReg, RegToSlot, LoadConstant, - 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, Label, LoadConstant, + check_main_chain [LoadConstant, LoadConstant, SlotToReg, RegToSlot, RegToSlot, + SlotToReg, SlotToReg, RegToSlot, SlotToReg, SlotToReg, + RegToSlot, SlotToReg, RegToSlot, SlotToReg, RegToSlot, + LoadConstant, SlotToReg, RegToSlot, LoadConstant, SlotToReg, + SlotToReg, RegToSlot, LoadConstant, SlotToReg, RegToSlot, + SlotToReg, FunctionCall, SlotToReg, SlotToReg, SlotToReg, + SlotToReg, SlotToReg, OperatorInstruction, IsMinus, LoadConstant, + Branch, RegToSlot, SlotToReg, SlotToReg, RegToSlot, + SlotToReg, SlotToReg, FunctionReturn, SlotToReg, SlotToReg, + RegToSlot, SlotToReg, SlotToReg, LoadConstant, OperatorInstruction, + IsZero, LoadConstant, OperatorInstruction, IsZero, LoadConstant, RegToSlot, SlotToReg, SlotToReg, RegToSlot, SlotToReg, SlotToReg, FunctionReturn, Transfer, Syscall, NilClass] assert_equal Parfait::Word , get_return.class assert_equal "then" , get_return.to_string end def test_exit - done = main_ticks(69) + done = main_ticks(64) assert_equal Syscall , done.class end end diff --git a/test/risc/interpreter/test_dynamic_call.rb b/test/risc/interpreter/test_dynamic_call.rb index 3d0a1e41..d8821296 100644 --- a/test/risc/interpreter/test_dynamic_call.rb +++ b/test/risc/interpreter/test_dynamic_call.rb @@ -11,28 +11,26 @@ module Risc def test_chain #show_main_ticks # get output of what is - check_main_chain [Label, LoadConstant, SlotToReg, RegToSlot, LoadConstant, - SlotToReg, SlotToReg, SlotToReg, SlotToReg, OperatorInstruction, - IsZero, SlotToReg, SlotToReg, SlotToReg, LoadConstant, - RegToSlot, LoadConstant, LoadConstant, SlotToReg, SlotToReg, - Label, LoadConstant, SlotToReg, OperatorInstruction, IsZero, + check_main_chain [LoadConstant, SlotToReg, RegToSlot, LoadConstant, SlotToReg, + SlotToReg, SlotToReg, SlotToReg, OperatorInstruction, IsZero, + SlotToReg, SlotToReg, SlotToReg, LoadConstant, RegToSlot, + LoadConstant, LoadConstant, SlotToReg, SlotToReg, LoadConstant, + SlotToReg, OperatorInstruction, IsZero, SlotToReg, OperatorInstruction, + IsZero, SlotToReg, Branch, LoadConstant, SlotToReg, + OperatorInstruction, IsZero, SlotToReg, OperatorInstruction, IsZero, + SlotToReg, Branch, LoadConstant, SlotToReg, OperatorInstruction, + IsZero, SlotToReg, OperatorInstruction, IsZero, SlotToReg, + Branch, LoadConstant, SlotToReg, OperatorInstruction, IsZero, SlotToReg, OperatorInstruction, IsZero, SlotToReg, Branch, - Label, LoadConstant, SlotToReg, OperatorInstruction, IsZero, - SlotToReg, OperatorInstruction, IsZero, SlotToReg, Branch, - Label, LoadConstant, SlotToReg, OperatorInstruction, IsZero, - SlotToReg, OperatorInstruction, IsZero, SlotToReg, Branch, - Label, LoadConstant, SlotToReg, OperatorInstruction, IsZero, - SlotToReg, OperatorInstruction, IsZero, SlotToReg, Branch, - Label, LoadConstant, SlotToReg, OperatorInstruction, IsZero, - SlotToReg, OperatorInstruction, IsZero, SlotToReg, Branch, - Label, LoadConstant, SlotToReg, OperatorInstruction, IsZero, - SlotToReg, OperatorInstruction, IsZero, Label, RegToSlot, - Label, LoadConstant, SlotToReg, LoadConstant, SlotToReg, - RegToSlot, RegToSlot, SlotToReg, SlotToReg, RegToSlot, - SlotToReg, SlotToReg, RegToSlot, SlotToReg, RegToSlot, - SlotToReg, RegToSlot, SlotToReg, SlotToReg, SlotToReg, - RegToSlot, LoadConstant, SlotToReg, RegToSlot, SlotToReg, - LoadConstant, SlotToReg, DynamicJump, Label, SlotToReg, + LoadConstant, SlotToReg, OperatorInstruction, IsZero, SlotToReg, + OperatorInstruction, IsZero, SlotToReg, Branch, LoadConstant, + SlotToReg, OperatorInstruction, IsZero, SlotToReg, OperatorInstruction, + IsZero, RegToSlot, LoadConstant, SlotToReg, LoadConstant, + SlotToReg, RegToSlot, RegToSlot, SlotToReg, SlotToReg, + RegToSlot, SlotToReg, SlotToReg, RegToSlot, SlotToReg, + RegToSlot, SlotToReg, RegToSlot, SlotToReg, SlotToReg, + SlotToReg, RegToSlot, LoadConstant, SlotToReg, RegToSlot, + SlotToReg, LoadConstant, SlotToReg, DynamicJump, SlotToReg, SlotToReg, LoadData, OperatorInstruction, LoadConstant, SlotToReg, SlotToReg, RegToSlot, RegToSlot, RegToSlot, SlotToReg, SlotToReg, RegToSlot, SlotToReg, SlotToReg, FunctionReturn, @@ -44,28 +42,28 @@ module Risc end def test_call_main - call_ins = ticks(26) + call_ins = ticks(25) assert_equal FunctionCall , call_ins.class assert_equal :main , call_ins.method.name end def test_load_entry - call_ins = main_ticks(5) + call_ins = main_ticks(4) assert_equal LoadConstant , call_ins.class assert_equal Parfait::CacheEntry , call_ins.constant.class end def test_dyn - cal = main_ticks(108) + cal = main_ticks(99) assert_equal DynamicJump , cal.class end def test_return - ret = main_ticks(137) + ret = main_ticks(127) assert_equal FunctionReturn , ret.class link = @interpreter.get_register( ret.register ) assert_equal Label , link.class end def test_sys - sys = main_ticks(139) + sys = main_ticks(129) assert_equal Syscall , sys.class end end diff --git a/test/risc/interpreter/test_return.rb b/test/risc/interpreter/test_return.rb index 171b59f1..30a377a3 100644 --- a/test/risc/interpreter/test_return.rb +++ b/test/risc/interpreter/test_return.rb @@ -11,9 +11,9 @@ module Risc def test_chain #show_main_ticks # get output of what is - check_main_chain [Label, LoadConstant, RegToSlot, SlotToReg, SlotToReg, - RegToSlot, SlotToReg, SlotToReg, FunctionReturn, Transfer, - Syscall, NilClass] + check_main_chain [LoadConstant, RegToSlot, SlotToReg, SlotToReg, RegToSlot, + SlotToReg, SlotToReg, FunctionReturn, Transfer, Syscall, + NilClass] assert_equal 5 , get_return.value end @@ -22,28 +22,23 @@ module Risc assert_equal FunctionCall , call_ins.class assert :main , call_ins.method.name end - def test_label_main - call_ins = main_ticks(1) - assert_equal Label , call_ins.class - assert :main , call_ins.name - end def test_load_5 - load_ins = main_ticks(2) + load_ins = main_ticks(1) assert_equal LoadConstant , load_ins.class assert_equal 5 , @interpreter.get_register(load_ins.register).value end def test_return - ret = main_ticks(9) + ret = main_ticks(8) assert_equal FunctionReturn , ret.class link = @interpreter.get_register( ret.register ) assert_equal Label , link.class end def test_transfer - transfer = main_ticks(10) + transfer = main_ticks(9) assert_equal Transfer , transfer.class end def test_sys - sys = main_ticks(11) + sys = main_ticks(10) assert_equal Syscall , sys.class end end diff --git a/test/risc/interpreter/while/test_while_cmp.rb b/test/risc/interpreter/while/test_while_cmp.rb index c3379762..7a0ce095 100644 --- a/test/risc/interpreter/while/test_while_cmp.rb +++ b/test/risc/interpreter/while/test_while_cmp.rb @@ -11,15 +11,14 @@ module Risc 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, + check_main_chain [LoadConstant, SlotToReg, RegToSlot, 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, + FunctionCall, SlotToReg, SlotToReg, SlotToReg, SlotToReg, + SlotToReg, OperatorInstruction, IsMinus, LoadConstant, Branch, RegToSlot, SlotToReg, SlotToReg, RegToSlot, SlotToReg, SlotToReg, FunctionReturn, SlotToReg, SlotToReg, RegToSlot, SlotToReg, SlotToReg, LoadConstant, OperatorInstruction, IsZero, @@ -29,30 +28,29 @@ module Risc 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, + FunctionCall, SlotToReg, SlotToReg, SlotToReg, SlotToReg, + SlotToReg, OperatorInstruction, LoadConstant, SlotToReg, SlotToReg, + RegToSlot, RegToSlot, RegToSlot, SlotToReg, SlotToReg, + RegToSlot, SlotToReg, SlotToReg, FunctionReturn, SlotToReg, + SlotToReg, RegToSlot, Branch, LoadConstant, LoadConstant, + SlotToReg, RegToSlot, RegToSlot, SlotToReg, SlotToReg, RegToSlot, SlotToReg, SlotToReg, RegToSlot, SlotToReg, - SlotToReg, RegToSlot, SlotToReg, RegToSlot, SlotToReg, + RegToSlot, SlotToReg, RegToSlot, LoadConstant, SlotToReg, + RegToSlot, SlotToReg, SlotToReg, SlotToReg, 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, + FunctionCall, SlotToReg, SlotToReg, SlotToReg, SlotToReg, + SlotToReg, OperatorInstruction, IsMinus, LoadConstant, RegToSlot, SlotToReg, SlotToReg, RegToSlot, SlotToReg, SlotToReg, - FunctionReturn, Transfer, Syscall, NilClass] + FunctionReturn, SlotToReg, SlotToReg, RegToSlot, SlotToReg, + SlotToReg, LoadConstant, OperatorInstruction, IsZero, 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) + done = main_ticks(170) assert_equal Syscall , done.class end end diff --git a/test/risc/interpreter/while/test_while_count.rb b/test/risc/interpreter/while/test_while_count.rb index e66083be..6fd73784 100644 --- a/test/risc/interpreter/while/test_while_count.rb +++ b/test/risc/interpreter/while/test_while_count.rb @@ -11,16 +11,15 @@ module Risc 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, IsZero, LoadConstant, Branch, - Label, RegToSlot, SlotToReg, SlotToReg, RegToSlot, + check_main_chain [LoadConstant, SlotToReg, RegToSlot, 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, + FunctionCall, SlotToReg, SlotToReg, SlotToReg, SlotToReg, + SlotToReg, OperatorInstruction, IsMinus, IsZero, LoadConstant, + Branch, RegToSlot, SlotToReg, SlotToReg, RegToSlot, SlotToReg, SlotToReg, FunctionReturn, SlotToReg, SlotToReg, RegToSlot, SlotToReg, SlotToReg, LoadConstant, OperatorInstruction, IsZero, LoadConstant, OperatorInstruction, IsZero, LoadConstant, @@ -29,31 +28,29 @@ module Risc 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, IsZero, - Label, LoadConstant, Label, RegToSlot, SlotToReg, + SlotToReg, FunctionCall, SlotToReg, SlotToReg, SlotToReg, + SlotToReg, SlotToReg, OperatorInstruction, LoadConstant, SlotToReg, + SlotToReg, RegToSlot, RegToSlot, RegToSlot, SlotToReg, SlotToReg, RegToSlot, SlotToReg, SlotToReg, FunctionReturn, - SlotToReg, SlotToReg, RegToSlot, SlotToReg, SlotToReg, - LoadConstant, OperatorInstruction, IsZero, Label, SlotToReg, + SlotToReg, SlotToReg, RegToSlot, Branch, LoadConstant, + LoadConstant, SlotToReg, RegToSlot, RegToSlot, SlotToReg, SlotToReg, RegToSlot, SlotToReg, SlotToReg, RegToSlot, - SlotToReg, SlotToReg, FunctionReturn, Transfer, Syscall, - NilClass] + SlotToReg, RegToSlot, SlotToReg, RegToSlot, LoadConstant, + SlotToReg, RegToSlot, SlotToReg, SlotToReg, SlotToReg, + SlotToReg, RegToSlot, LoadConstant, SlotToReg, RegToSlot, + SlotToReg, FunctionCall, SlotToReg, SlotToReg, SlotToReg, + SlotToReg, SlotToReg, OperatorInstruction, IsMinus, IsZero, + LoadConstant, RegToSlot, SlotToReg, SlotToReg, RegToSlot, + SlotToReg, SlotToReg, FunctionReturn, SlotToReg, SlotToReg, + RegToSlot, SlotToReg, SlotToReg, LoadConstant, OperatorInstruction, + IsZero, SlotToReg, SlotToReg, RegToSlot, SlotToReg, + SlotToReg, RegToSlot, SlotToReg, SlotToReg, FunctionReturn, + Transfer, Syscall, NilClass] assert_kind_of Parfait::Integer , get_return assert_equal 0 , get_return.value end def test_exit - done = main_ticks(185) + done = main_ticks(172) assert_equal Syscall , done.class end end diff --git a/test/risc/interpreter/while/test_while_simple.rb b/test/risc/interpreter/while/test_while_simple.rb index 759bc21c..a35885c4 100644 --- a/test/risc/interpreter/while/test_while_simple.rb +++ b/test/risc/interpreter/while/test_while_simple.rb @@ -11,48 +11,50 @@ module Risc def test_if #show_main_ticks # get output of what is in main - check_main_chain [Label, LoadConstant, SlotToReg, RegToSlot, Label, + check_main_chain [LoadConstant, SlotToReg, RegToSlot, SlotToReg, SlotToReg, + LoadConstant, OperatorInstruction, IsZero, LoadConstant, OperatorInstruction, + IsZero, LoadConstant, SlotToReg, RegToSlot, Branch, SlotToReg, SlotToReg, LoadConstant, OperatorInstruction, IsZero, - LoadConstant, OperatorInstruction, IsZero, LoadConstant, SlotToReg, - RegToSlot, Branch, Label, SlotToReg, SlotToReg, - LoadConstant, OperatorInstruction, IsZero, Label, SlotToReg, - SlotToReg, RegToSlot, SlotToReg, SlotToReg, RegToSlot, - SlotToReg, SlotToReg, FunctionReturn, Transfer, Syscall, - NilClass] + SlotToReg, SlotToReg, RegToSlot, SlotToReg, SlotToReg, + RegToSlot, SlotToReg, SlotToReg, FunctionReturn, Transfer, + Syscall, NilClass] assert_kind_of Parfait::FalseClass , get_return end def test_load_false_const - load = main_ticks(2) + load = main_ticks(1) assert_equal LoadConstant , load.class assert_kind_of Parfait::TrueClass , load.constant end + def base + 6 + end def test_load_false - load = main_ticks(8) + load = main_ticks(base) assert_equal LoadConstant , load.class assert_equal Parfait::FalseClass , load.constant.class end def test_compare - op = main_ticks(9) + op = main_ticks(base+1) assert_equal OperatorInstruction , op.class assert_equal :- , op.operator end def test_not_zero - check = main_ticks(10) + check = main_ticks(base + 2) assert_equal IsZero , check.class assert check.label.name.start_with?("merge_label") , check.label.name end def test_compare2 - op = main_ticks(12) + op = main_ticks(base + 4) assert_equal OperatorInstruction , op.class assert_equal :- , op.operator end def test_not_zero2 - check = main_ticks(13) + check = main_ticks(base + 5) assert_equal IsZero , check.class assert check.label.name.start_with?("merge_label") , check.label.name end def test_exit - done = main_ticks(35) + done = main_ticks(31) assert_equal Syscall , done.class end end diff --git a/test/risc/mains/test_puts.rb b/test/risc/mains/test_puts.rb index cc6b9464..d09e41bf 100644 --- a/test/risc/mains/test_puts.rb +++ b/test/risc/mains/test_puts.rb @@ -1,7 +1,7 @@ -require_relative '../helper' +require_relative 'helper' module Mains - class TestPuts < MainsTest + class TestPuts #< MainsTest def test_say_hi hi = "Hello there"