18f9ea019e
after renaming compiler to soml it’s where they wanna be also will allow for unifying test helpers and testing fragments remotely too
108 lines
2.5 KiB
Ruby
108 lines
2.5 KiB
Ruby
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
|