require_relative "helper" class AddTest < MiniTest::Test include Ticker include AST::Sexp def test_puti @string_input = <<HERE class Integer < Object Word digit( int rest ) if_zero( rest == 5 ) return "5" end if_zero( rest == 1 ) return "1" end if_zero( rest == 2 ) return "2" end if_zero( rest == 3 ) return "3" end if_zero( rest == 4 ) return "4" end end Word add_string(Word str) int div div = self / 10 int rest rest = self - div if_notzero( rest ) rest = self.digit( rest ) else str = div.add_string(str) end return str end Word to_string() Word start = " " return add_string( start ) end end class Object int main() 5.to_string() end end HERE machine = Register.machine.boot syntax = Parser::Salama.new.parse_with_debug(@string_input) parts = Parser::Transform.new.apply(syntax) #puts parts.inspect Soml.compile( parts ) machine.collect @interpreter = Interpreter::Interpreter.new @interpreter.start Register.machine.init #show_ticks # get output of what is ["Branch","Label","LoadConstant","GetSlot","SetSlot", "LoadConstant","SetSlot","RegisterTransfer","FunctionCall","Label", "GetSlot","LoadConstant","SetSlot","LoadConstant","SetSlot", "LoadConstant","SetSlot","LoadConstant","SetSlot","RegisterTransfer", "FunctionCall","Label","LoadConstant","GetSlot","SetSlot", "GetSlot","GetSlot","SetSlot","LoadConstant","SetSlot", "LoadConstant","SetSlot","GetSlot","GetSlot","SetSlot", "LoadConstant","SetSlot","RegisterTransfer","FunctionCall","Label", "GetSlot","LoadConstant","OperatorInstruction","GetSlot","SetSlot", "GetSlot","GetSlot","GetSlot","OperatorInstruction","GetSlot", "SetSlot","GetSlot","GetSlot","IsNotzero","Label", "GetSlot","GetSlot","SetSlot","LoadConstant","SetSlot", "LoadConstant","SetSlot","GetSlot","GetSlot","SetSlot", "LoadConstant","SetSlot","RegisterTransfer","FunctionCall","Label", "GetSlot","LoadConstant","OperatorInstruction","IsZero","Branch", "Label","GetSlot","LoadConstant","OperatorInstruction","IsZero", "Label","LoadConstant","SetSlot","Label","GetSlot", "LoadConstant","OperatorInstruction","IsZero","Label","LoadConstant", "SetSlot","Label","GetSlot","LoadConstant","OperatorInstruction", "IsZero","Label","LoadConstant","SetSlot","Label", "GetSlot","LoadConstant","OperatorInstruction","IsZero","Label", "LoadConstant","SetSlot","Label","Label","RegisterTransfer", "GetSlot","FunctionReturn","GetSlot","GetSlot","SetSlot", "Label","GetSlot","SetSlot","Label","RegisterTransfer", "GetSlot","FunctionReturn","GetSlot","SetSlot","Label", "RegisterTransfer","GetSlot","FunctionReturn","GetSlot","Label", "RegisterTransfer","GetSlot","FunctionReturn","RegisterTransfer","Syscall", "NilClass"].each_with_index do |name , index| got = ticks(1) assert got.class.name.index(name) , "Wrong class for #{index+1}, expect #{name} , got #{got}" end end end