From b00b0cf0641644e35e5c1e3d257eec9b1edafae8 Mon Sep 17 00:00:00 2001 From: Torsten Ruger Date: Fri, 20 Jul 2018 21:00:47 +0300 Subject: [PATCH] fixed some interpreter tests hoisting is slightly more simple and that adds a couple insstructions --- .../interpreter/assign/test_assign_thrice.rb | 47 +++++------ .../interpreter/assign/test_assign_twice.rb | 29 +++---- test/risc/interpreter/while/test_while_cmp.rb | 75 +++++++++--------- .../interpreter/while/test_while_count.rb | 78 ++++++++++--------- test/support/risc_interpreter.rb | 2 +- 5 files changed, 119 insertions(+), 112 deletions(-) diff --git a/test/risc/interpreter/assign/test_assign_thrice.rb b/test/risc/interpreter/assign/test_assign_thrice.rb index 7094f166..ae03e218 100644 --- a/test/risc/interpreter/assign/test_assign_thrice.rb +++ b/test/risc/interpreter/assign/test_assign_thrice.rb @@ -11,32 +11,33 @@ module Risc def test_chain #show_main_ticks # get output of what is - check_main_chain [LoadConstant, SlotToReg, RegToSlot, LoadConstant, LoadConstant, - SlotToReg, RegToSlot, RegToSlot, SlotToReg, SlotToReg, - RegToSlot, SlotToReg, SlotToReg, Branch, RegToSlot, - SlotToReg, RegToSlot, SlotToReg, RegToSlot, LoadConstant, - SlotToReg, RegToSlot, SlotToReg, SlotToReg, SlotToReg, - SlotToReg, RegToSlot, Branch, LoadConstant, SlotToReg, - RegToSlot, SlotToReg, FunctionCall, SlotToReg, SlotToReg, - SlotToReg, SlotToReg, SlotToReg, OperatorInstruction, LoadConstant, - SlotToReg, SlotToReg, RegToSlot, RegToSlot, RegToSlot, - SlotToReg, Branch, SlotToReg, RegToSlot, SlotToReg, - SlotToReg, SlotToReg, FunctionReturn, SlotToReg, SlotToReg, - RegToSlot, LoadConstant, LoadConstant, SlotToReg, RegToSlot, - RegToSlot, Branch, SlotToReg, SlotToReg, RegToSlot, - SlotToReg, SlotToReg, RegToSlot, SlotToReg, RegToSlot, + check_main_chain [LoadConstant, SlotToReg, RegToSlot, SlotToReg, SlotToReg, + SlotToReg, RegToSlot, LoadConstant, LoadConstant, SlotToReg, + RegToSlot, RegToSlot, SlotToReg, Branch, SlotToReg, + RegToSlot, SlotToReg, SlotToReg, RegToSlot, SlotToReg, + RegToSlot, SlotToReg, RegToSlot, LoadConstant, SlotToReg, + RegToSlot, SlotToReg, Branch, SlotToReg, SlotToReg, SlotToReg, RegToSlot, LoadConstant, SlotToReg, RegToSlot, - Branch, SlotToReg, SlotToReg, SlotToReg, SlotToReg, - RegToSlot, LoadConstant, SlotToReg, RegToSlot, SlotToReg, - FunctionCall, SlotToReg, SlotToReg, SlotToReg, SlotToReg, - SlotToReg, OperatorInstruction, LoadConstant, SlotToReg, SlotToReg, - RegToSlot, RegToSlot, RegToSlot, SlotToReg, Branch, - SlotToReg, RegToSlot, SlotToReg, SlotToReg, SlotToReg, - FunctionReturn, SlotToReg, SlotToReg, RegToSlot, Branch, + SlotToReg, FunctionCall, SlotToReg, SlotToReg, SlotToReg, + SlotToReg, SlotToReg, OperatorInstruction, LoadConstant, SlotToReg, + SlotToReg, RegToSlot, RegToSlot, RegToSlot, SlotToReg, + Branch, SlotToReg, RegToSlot, SlotToReg, SlotToReg, + SlotToReg, FunctionReturn, SlotToReg, SlotToReg, RegToSlot, + SlotToReg, Branch, SlotToReg, SlotToReg, RegToSlot, + LoadConstant, LoadConstant, SlotToReg, RegToSlot, RegToSlot, SlotToReg, SlotToReg, RegToSlot, SlotToReg, SlotToReg, + Branch, RegToSlot, SlotToReg, RegToSlot, SlotToReg, + RegToSlot, LoadConstant, SlotToReg, RegToSlot, SlotToReg, + SlotToReg, SlotToReg, SlotToReg, RegToSlot, Branch, + LoadConstant, SlotToReg, RegToSlot, SlotToReg, FunctionCall, + SlotToReg, SlotToReg, SlotToReg, SlotToReg, SlotToReg, + OperatorInstruction, LoadConstant, SlotToReg, SlotToReg, RegToSlot, + RegToSlot, RegToSlot, SlotToReg, Branch, SlotToReg, RegToSlot, SlotToReg, SlotToReg, SlotToReg, FunctionReturn, - Transfer, SlotToReg, Branch, SlotToReg, Syscall, - NilClass] + SlotToReg, SlotToReg, RegToSlot, SlotToReg, SlotToReg, + RegToSlot, SlotToReg, SlotToReg, Branch, RegToSlot, + SlotToReg, SlotToReg, SlotToReg, FunctionReturn, Transfer, + SlotToReg, Branch, SlotToReg, Syscall, NilClass] assert_equal 15 , get_return end diff --git a/test/risc/interpreter/assign/test_assign_twice.rb b/test/risc/interpreter/assign/test_assign_twice.rb index 074c9ba0..687e1ca9 100644 --- a/test/risc/interpreter/assign/test_assign_twice.rb +++ b/test/risc/interpreter/assign/test_assign_twice.rb @@ -11,21 +11,22 @@ module Risc def test_chain #show_main_ticks # get output of what is - check_main_chain [LoadConstant, SlotToReg, RegToSlot, LoadConstant, LoadConstant, - SlotToReg, RegToSlot, RegToSlot, SlotToReg, SlotToReg, - RegToSlot, SlotToReg, SlotToReg, Branch, RegToSlot, - SlotToReg, RegToSlot, SlotToReg, RegToSlot, LoadConstant, - SlotToReg, RegToSlot, SlotToReg, SlotToReg, SlotToReg, - SlotToReg, RegToSlot, Branch, LoadConstant, SlotToReg, - RegToSlot, SlotToReg, FunctionCall, SlotToReg, SlotToReg, - SlotToReg, SlotToReg, SlotToReg, OperatorInstruction, LoadConstant, - SlotToReg, SlotToReg, RegToSlot, RegToSlot, RegToSlot, - SlotToReg, Branch, SlotToReg, RegToSlot, SlotToReg, - SlotToReg, SlotToReg, FunctionReturn, SlotToReg, SlotToReg, + check_main_chain [LoadConstant, SlotToReg, RegToSlot, SlotToReg, SlotToReg, + SlotToReg, RegToSlot, LoadConstant, LoadConstant, SlotToReg, + RegToSlot, RegToSlot, SlotToReg, Branch, SlotToReg, RegToSlot, SlotToReg, SlotToReg, RegToSlot, SlotToReg, - SlotToReg, Branch, RegToSlot, SlotToReg, SlotToReg, - SlotToReg, FunctionReturn, Transfer, SlotToReg, Branch, - SlotToReg, Syscall, NilClass] + RegToSlot, SlotToReg, RegToSlot, LoadConstant, SlotToReg, + RegToSlot, SlotToReg, Branch, SlotToReg, SlotToReg, + SlotToReg, RegToSlot, LoadConstant, SlotToReg, RegToSlot, + SlotToReg, FunctionCall, SlotToReg, SlotToReg, SlotToReg, + SlotToReg, SlotToReg, OperatorInstruction, LoadConstant, SlotToReg, + SlotToReg, RegToSlot, RegToSlot, RegToSlot, SlotToReg, + Branch, SlotToReg, RegToSlot, SlotToReg, SlotToReg, + SlotToReg, FunctionReturn, SlotToReg, SlotToReg, RegToSlot, + SlotToReg, Branch, SlotToReg, RegToSlot, SlotToReg, + SlotToReg, RegToSlot, SlotToReg, SlotToReg, SlotToReg, + FunctionReturn, Transfer, SlotToReg, Branch, SlotToReg, + Syscall, NilClass] assert_equal 10 , get_return end end diff --git a/test/risc/interpreter/while/test_while_cmp.rb b/test/risc/interpreter/while/test_while_cmp.rb index 2ddcc8d8..e7d66c69 100644 --- a/test/risc/interpreter/while/test_while_cmp.rb +++ b/test/risc/interpreter/while/test_while_cmp.rb @@ -11,48 +11,51 @@ module Risc def test_if #show_main_ticks # get output of what is in main - check_main_chain [LoadConstant, SlotToReg, RegToSlot, LoadConstant, LoadConstant, - SlotToReg, RegToSlot, RegToSlot, SlotToReg, SlotToReg, - RegToSlot, SlotToReg, SlotToReg, Branch, RegToSlot, - SlotToReg, RegToSlot, SlotToReg, RegToSlot, LoadConstant, - SlotToReg, RegToSlot, SlotToReg, SlotToReg, SlotToReg, - SlotToReg, RegToSlot, Branch, LoadConstant, SlotToReg, - RegToSlot, SlotToReg, FunctionCall, SlotToReg, SlotToReg, - SlotToReg, SlotToReg, SlotToReg, OperatorInstruction, IsMinus, - LoadConstant, Branch, RegToSlot, SlotToReg, SlotToReg, - Branch, RegToSlot, SlotToReg, SlotToReg, SlotToReg, - FunctionReturn, SlotToReg, SlotToReg, RegToSlot, SlotToReg, - SlotToReg, LoadConstant, OperatorInstruction, IsZero, Branch, - LoadConstant, OperatorInstruction, IsZero, LoadConstant, LoadConstant, - SlotToReg, RegToSlot, RegToSlot, SlotToReg, SlotToReg, - RegToSlot, SlotToReg, SlotToReg, Branch, RegToSlot, - SlotToReg, RegToSlot, SlotToReg, RegToSlot, LoadConstant, - SlotToReg, RegToSlot, SlotToReg, SlotToReg, SlotToReg, - SlotToReg, RegToSlot, Branch, LoadConstant, SlotToReg, - RegToSlot, SlotToReg, FunctionCall, SlotToReg, SlotToReg, - SlotToReg, SlotToReg, SlotToReg, OperatorInstruction, LoadConstant, - SlotToReg, SlotToReg, RegToSlot, RegToSlot, RegToSlot, - SlotToReg, Branch, SlotToReg, RegToSlot, SlotToReg, - SlotToReg, SlotToReg, FunctionReturn, SlotToReg, SlotToReg, - RegToSlot, Branch, LoadConstant, LoadConstant, SlotToReg, - RegToSlot, RegToSlot, SlotToReg, SlotToReg, RegToSlot, - SlotToReg, SlotToReg, Branch, RegToSlot, SlotToReg, + check_main_chain [LoadConstant, SlotToReg, RegToSlot, SlotToReg, SlotToReg, + SlotToReg, RegToSlot, LoadConstant, LoadConstant, SlotToReg, + RegToSlot, RegToSlot, SlotToReg, Branch, SlotToReg, + RegToSlot, SlotToReg, SlotToReg, RegToSlot, SlotToReg, RegToSlot, SlotToReg, RegToSlot, LoadConstant, SlotToReg, - RegToSlot, SlotToReg, SlotToReg, SlotToReg, SlotToReg, - RegToSlot, Branch, LoadConstant, SlotToReg, RegToSlot, + RegToSlot, SlotToReg, Branch, SlotToReg, SlotToReg, + SlotToReg, RegToSlot, LoadConstant, SlotToReg, RegToSlot, SlotToReg, FunctionCall, SlotToReg, SlotToReg, SlotToReg, SlotToReg, SlotToReg, OperatorInstruction, IsMinus, LoadConstant, - RegToSlot, SlotToReg, SlotToReg, Branch, RegToSlot, - SlotToReg, SlotToReg, SlotToReg, FunctionReturn, SlotToReg, - SlotToReg, RegToSlot, SlotToReg, SlotToReg, LoadConstant, - OperatorInstruction, IsZero, SlotToReg, SlotToReg, RegToSlot, - SlotToReg, Branch, SlotToReg, RegToSlot, SlotToReg, - SlotToReg, SlotToReg, FunctionReturn, Transfer, SlotToReg, - Branch, SlotToReg, Syscall, NilClass] + Branch, RegToSlot, SlotToReg, SlotToReg, Branch, + RegToSlot, SlotToReg, SlotToReg, SlotToReg, FunctionReturn, + SlotToReg, SlotToReg, RegToSlot, SlotToReg, Branch, + SlotToReg, LoadConstant, OperatorInstruction, IsZero, LoadConstant, + OperatorInstruction, IsZero, SlotToReg, SlotToReg, SlotToReg, + RegToSlot, LoadConstant, LoadConstant, Branch, SlotToReg, + RegToSlot, RegToSlot, SlotToReg, SlotToReg, RegToSlot, + SlotToReg, SlotToReg, RegToSlot, SlotToReg, RegToSlot, + SlotToReg, RegToSlot, Branch, 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, Branch, + SlotToReg, RegToSlot, SlotToReg, SlotToReg, SlotToReg, + FunctionReturn, SlotToReg, SlotToReg, RegToSlot, Branch, + SlotToReg, SlotToReg, SlotToReg, RegToSlot, LoadConstant, + LoadConstant, SlotToReg, RegToSlot, RegToSlot, SlotToReg, + Branch, SlotToReg, RegToSlot, SlotToReg, SlotToReg, + RegToSlot, SlotToReg, RegToSlot, SlotToReg, RegToSlot, + LoadConstant, SlotToReg, RegToSlot, SlotToReg, Branch, + SlotToReg, SlotToReg, SlotToReg, RegToSlot, LoadConstant, + SlotToReg, RegToSlot, SlotToReg, FunctionCall, SlotToReg, + SlotToReg, SlotToReg, SlotToReg, SlotToReg, OperatorInstruction, + IsMinus, LoadConstant, RegToSlot, SlotToReg, SlotToReg, + Branch, RegToSlot, SlotToReg, SlotToReg, SlotToReg, + FunctionReturn, SlotToReg, SlotToReg, RegToSlot, SlotToReg, + Branch, SlotToReg, LoadConstant, OperatorInstruction, IsZero, + SlotToReg, SlotToReg, RegToSlot, SlotToReg, SlotToReg, + RegToSlot, SlotToReg, SlotToReg, SlotToReg, Branch, + FunctionReturn, Transfer, SlotToReg, Branch, SlotToReg, + Syscall, NilClass] assert_equal 1 , get_return end def test_exit - done = main_ticks(188) + done = main_ticks(201) 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 0403cb24..42628fb1 100644 --- a/test/risc/interpreter/while/test_while_count.rb +++ b/test/risc/interpreter/while/test_while_count.rb @@ -11,49 +11,51 @@ module Risc def test_if #show_main_ticks # get output of what is in main - check_main_chain [LoadConstant, SlotToReg, RegToSlot, LoadConstant, LoadConstant, - SlotToReg, RegToSlot, RegToSlot, SlotToReg, SlotToReg, - RegToSlot, SlotToReg, SlotToReg, Branch, RegToSlot, - SlotToReg, RegToSlot, SlotToReg, RegToSlot, LoadConstant, - SlotToReg, RegToSlot, SlotToReg, SlotToReg, SlotToReg, - SlotToReg, RegToSlot, Branch, LoadConstant, SlotToReg, - RegToSlot, SlotToReg, FunctionCall, SlotToReg, SlotToReg, - SlotToReg, SlotToReg, SlotToReg, OperatorInstruction, IsMinus, - IsZero, LoadConstant, Branch, RegToSlot, SlotToReg, - Branch, SlotToReg, RegToSlot, SlotToReg, SlotToReg, - SlotToReg, FunctionReturn, SlotToReg, SlotToReg, RegToSlot, - SlotToReg, SlotToReg, LoadConstant, OperatorInstruction, IsZero, - Branch, LoadConstant, OperatorInstruction, IsZero, LoadConstant, - LoadConstant, SlotToReg, RegToSlot, RegToSlot, SlotToReg, - SlotToReg, RegToSlot, SlotToReg, SlotToReg, Branch, - RegToSlot, SlotToReg, RegToSlot, SlotToReg, RegToSlot, - LoadConstant, SlotToReg, RegToSlot, SlotToReg, SlotToReg, - SlotToReg, SlotToReg, RegToSlot, Branch, LoadConstant, - SlotToReg, RegToSlot, SlotToReg, FunctionCall, SlotToReg, - SlotToReg, SlotToReg, SlotToReg, SlotToReg, OperatorInstruction, - LoadConstant, SlotToReg, SlotToReg, RegToSlot, RegToSlot, - RegToSlot, SlotToReg, Branch, SlotToReg, RegToSlot, - SlotToReg, SlotToReg, SlotToReg, FunctionReturn, SlotToReg, - SlotToReg, RegToSlot, Branch, LoadConstant, LoadConstant, - SlotToReg, RegToSlot, RegToSlot, SlotToReg, SlotToReg, - RegToSlot, SlotToReg, SlotToReg, Branch, RegToSlot, - SlotToReg, RegToSlot, SlotToReg, RegToSlot, LoadConstant, - SlotToReg, RegToSlot, SlotToReg, SlotToReg, SlotToReg, - SlotToReg, RegToSlot, Branch, LoadConstant, SlotToReg, - RegToSlot, SlotToReg, FunctionCall, SlotToReg, SlotToReg, - SlotToReg, SlotToReg, SlotToReg, OperatorInstruction, IsMinus, - IsZero, LoadConstant, RegToSlot, SlotToReg, Branch, + check_main_chain [LoadConstant, SlotToReg, RegToSlot, SlotToReg, SlotToReg, + SlotToReg, RegToSlot, LoadConstant, LoadConstant, SlotToReg, + RegToSlot, RegToSlot, SlotToReg, Branch, SlotToReg, + RegToSlot, SlotToReg, SlotToReg, RegToSlot, SlotToReg, + RegToSlot, SlotToReg, RegToSlot, LoadConstant, SlotToReg, + RegToSlot, SlotToReg, Branch, SlotToReg, SlotToReg, + SlotToReg, RegToSlot, LoadConstant, SlotToReg, RegToSlot, + SlotToReg, FunctionCall, SlotToReg, SlotToReg, SlotToReg, + SlotToReg, SlotToReg, OperatorInstruction, IsMinus, IsZero, + LoadConstant, Branch, RegToSlot, SlotToReg, Branch, SlotToReg, RegToSlot, SlotToReg, SlotToReg, SlotToReg, FunctionReturn, SlotToReg, SlotToReg, RegToSlot, SlotToReg, - SlotToReg, LoadConstant, OperatorInstruction, IsZero, SlotToReg, - SlotToReg, RegToSlot, SlotToReg, Branch, SlotToReg, - RegToSlot, SlotToReg, SlotToReg, SlotToReg, FunctionReturn, - Transfer, SlotToReg, Branch, SlotToReg, Syscall, - NilClass] + Branch, SlotToReg, LoadConstant, OperatorInstruction, IsZero, + LoadConstant, OperatorInstruction, IsZero, SlotToReg, SlotToReg, + SlotToReg, RegToSlot, LoadConstant, LoadConstant, Branch, + SlotToReg, RegToSlot, RegToSlot, SlotToReg, SlotToReg, + RegToSlot, SlotToReg, SlotToReg, RegToSlot, SlotToReg, + RegToSlot, SlotToReg, RegToSlot, Branch, 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, + Branch, SlotToReg, RegToSlot, SlotToReg, SlotToReg, + SlotToReg, FunctionReturn, SlotToReg, SlotToReg, RegToSlot, + Branch, SlotToReg, SlotToReg, SlotToReg, RegToSlot, + LoadConstant, LoadConstant, SlotToReg, RegToSlot, RegToSlot, + SlotToReg, Branch, SlotToReg, RegToSlot, SlotToReg, + SlotToReg, RegToSlot, SlotToReg, RegToSlot, SlotToReg, + RegToSlot, LoadConstant, SlotToReg, RegToSlot, SlotToReg, + Branch, SlotToReg, SlotToReg, SlotToReg, RegToSlot, + LoadConstant, SlotToReg, RegToSlot, SlotToReg, FunctionCall, + SlotToReg, SlotToReg, SlotToReg, SlotToReg, SlotToReg, + OperatorInstruction, IsMinus, IsZero, LoadConstant, RegToSlot, + SlotToReg, Branch, SlotToReg, RegToSlot, SlotToReg, + SlotToReg, SlotToReg, FunctionReturn, SlotToReg, SlotToReg, + RegToSlot, SlotToReg, Branch, SlotToReg, LoadConstant, + OperatorInstruction, IsZero, SlotToReg, SlotToReg, RegToSlot, + SlotToReg, SlotToReg, RegToSlot, SlotToReg, SlotToReg, + SlotToReg, Branch, FunctionReturn, Transfer, SlotToReg, + Branch, SlotToReg, Syscall, NilClass] assert_equal 0 , get_return end def test_exit - done = main_ticks(190) + done = main_ticks(203) assert_equal Syscall , done.class end end diff --git a/test/support/risc_interpreter.rb b/test/support/risc_interpreter.rb index 6a192603..7d01a983 100644 --- a/test/support/risc_interpreter.rb +++ b/test/support/risc_interpreter.rb @@ -19,7 +19,7 @@ module Risc ticks( start_at ) if start_at > 0 should.each_with_index do |name , index| got = ticks(1) - assert_equal got.class ,name , "Wrong class for #{index + 1 - start_at}, expect #{name} , got #{got}" + assert_equal got.class ,name , "Wrong class for #{index + 1}, expect #{name} , got #{got}" end end # check the main only, ignoring the __init instructions