require_relative 'helper' module Register class TestCallStatement < MiniTest::Test include Statements def test_call_constant_int @string_input = <<HERE class Integer int putint() return 1 end end class Object int main() 42.putint() end end HERE @expect = [Label, GetSlot, LoadConstant, SetSlot, LoadConstant, SetSlot, LoadConstant , SetSlot, LoadConstant, SetSlot, RegisterTransfer, FunctionCall, Label, RegisterTransfer , GetSlot, GetSlot, Label, FunctionReturn] check end def test_call_constant_string @string_input = <<HERE class Word int putstring() return 1 end end class Object int main() "Hello".putstring() end end HERE @expect = [Label, GetSlot, LoadConstant, SetSlot, LoadConstant, SetSlot, LoadConstant , SetSlot, LoadConstant, SetSlot, RegisterTransfer, FunctionCall, Label, RegisterTransfer , GetSlot, GetSlot, Label, FunctionReturn] check end def test_call_local_int @string_input = <<HERE class Integer int putint() return 1 end end class Object int main() int testi = 20 testi.putint() end end HERE @expect = [Label, LoadConstant, GetSlot, SetSlot, GetSlot, GetSlot, GetSlot , SetSlot, LoadConstant, SetSlot, LoadConstant, SetSlot, LoadConstant, SetSlot , RegisterTransfer, FunctionCall, Label, RegisterTransfer, GetSlot, GetSlot, Label , FunctionReturn] check end def test_call_local_class @string_input = <<HERE class List < Object int add() return 1 end end class Object int main() List test_l test_l.add() end end HERE @expect = [Label, GetSlot, GetSlot, GetSlot, SetSlot, LoadConstant, SetSlot , LoadConstant, SetSlot, LoadConstant, SetSlot, RegisterTransfer, FunctionCall, Label , RegisterTransfer, GetSlot, GetSlot, Label, FunctionReturn] check end def test_call_puts @string_input = <<HERE class Object int puts(Word str) return str end int main() puts("Hello") end end HERE @expect = [Label, GetSlot, GetSlot, SetSlot, LoadConstant, SetSlot, LoadConstant , SetSlot, LoadConstant, SetSlot, LoadConstant, SetSlot, RegisterTransfer, FunctionCall , Label, RegisterTransfer, GetSlot, GetSlot, Label, FunctionReturn] was = check set = was.next(7) assert_equal SetSlot , set.class assert_equal 9, set.index , "Set to message must be offset, not #{set.index}" end end end