require_relative 'helper' module Register class TestAssignStatement < MiniTest::Test include Statements def setup Virtual.machine.boot end def test_assign_arg Virtual.machine.space.get_main.arguments.push Parfait::Variable.new(:Integer , :bar) @string_input = <<HERE class Object int main(int bar) bar = 5 end end HERE @expect = [[Virtual::MethodEnter,LoadConstant,SetSlot] , [Virtual::MethodReturn]] check end def test_assign_int @string_input = <<HERE class Object int main() int r = 5 end end HERE @expect = [[Virtual::MethodEnter,LoadConstant,SetSlot] , [Virtual::MethodReturn]] check end def test_assign_op @string_input = <<HERE class Object int main() int n = 10 + 1 end end HERE @expect = [[Virtual::MethodEnter,LoadConstant,LoadConstant, OperatorInstruction,SetSlot],[Virtual::MethodReturn]] check end def test_assign_local @string_input = <<HERE class Object int main() int runner runner = 5 end end HERE @expect = [[Virtual::MethodEnter,LoadConstant,SetSlot] , [Virtual::MethodReturn]] check end def test_assign_local_assign @string_input = <<HERE class Object int main() int runner = 5 end end HERE @expect = [[Virtual::MethodEnter,LoadConstant, SetSlot] , [Virtual::MethodReturn]] check end def test_assign_call @string_input = <<HERE class Object int main() int r = main() end end HERE @expect = [[Virtual::MethodEnter,GetSlot,SetSlot, LoadConstant, SetSlot,Virtual::MethodCall,GetSlot,SetSlot] , [Virtual::MethodReturn]] check end end end