require_relative "helper" module Risc class TestInterpretByteToReg < MiniTest::Test include Ticker def setup @string_input = <<HERE class Space int main() "Hello".get_internal_byte(1) end end HERE @input = s(:statements, s(:call, :get_internal_byte, s(:arguments, s(:int, 1)), s(:receiver, s(:string, "Hello")))) super end def pest_chain #show_ticks # get output of what is check_chain [Branch, Label, LoadConstant, SlotToReg, RegToSlot, LoadConstant, RegToSlot, FunctionCall, Label, SlotToReg, LoadConstant, RegToSlot, LoadConstant, RegToSlot, LoadConstant, SlotToReg, RegToSlot, LoadConstant, SlotToReg, RegToSlot, LoadConstant, RegToSlot, RiscTransfer, FunctionCall, Label, LoadConstant, SlotToReg, RegToSlot, SlotToReg, SlotToReg, SlotToReg, ByteToReg, RegToSlot, Label, FunctionReturn, RiscTransfer, SlotToReg, SlotToReg, LoadConstant, SlotToReg, RegToSlot, Label, FunctionReturn, RiscTransfer, Syscall, NilClass] end def pest_branch was = @interpreter.instruction assert_equal Branch , ticks(1).class assert was != @interpreter.instruction assert @interpreter.instruction , "should have gone to next instruction" end def pest_load assert_equal LoadConstant , ticks(3).class assert_equal Parfait::Space , @interpreter.get_register(:r2).class assert_equal :r2, @interpreter.instruction.array.symbol end def pest_get assert_equal SlotToReg , ticks(4).class assert @interpreter.get_register( :r1 ) assert Integer , @interpreter.get_register( :r1 ).class end def pest_call assert_equal FunctionCall , ticks(8).class end def pest_exit done = ticks(46) assert_equal NilClass , done.class end def pest_byte_to_reg done = ticks(32) assert_equal ByteToReg , done.class assert_equal "H".ord , @interpreter.get_register(done.register) end end end