ce79617875
was returning wrong register (1, not 0) also saving the message for test, which changes order as the return value destroys the message
48 lines
1.7 KiB
Ruby
48 lines
1.7 KiB
Ruby
require_relative "../helper"
|
|
|
|
module Risc
|
|
class InterpreterMultTest < MiniTest::Test
|
|
include Ticker
|
|
|
|
def setup
|
|
@string_input = as_main "return #{2**31} * #{2**31}"
|
|
super
|
|
end
|
|
|
|
def test_mult
|
|
#show_main_ticks # get output of what is
|
|
check_main_chain [LoadConstant, LoadConstant, SlotToReg, RegToSlot, RegToSlot,
|
|
SlotToReg, SlotToReg, RegToSlot, SlotToReg, SlotToReg,
|
|
RegToSlot, SlotToReg, RegToSlot, Branch, SlotToReg,
|
|
RegToSlot, LoadConstant, SlotToReg, RegToSlot, LoadConstant,
|
|
SlotToReg, SlotToReg, RegToSlot, LoadConstant, SlotToReg,
|
|
RegToSlot, SlotToReg, Branch, FunctionCall, SlotToReg,
|
|
SlotToReg, SlotToReg, SlotToReg, SlotToReg, OperatorInstruction,
|
|
LoadConstant, SlotToReg, SlotToReg, RegToSlot, RegToSlot,
|
|
RegToSlot, SlotToReg, Branch, SlotToReg, RegToSlot,
|
|
SlotToReg, SlotToReg, SlotToReg, FunctionReturn, SlotToReg,
|
|
SlotToReg, RegToSlot, SlotToReg, SlotToReg, RegToSlot,
|
|
SlotToReg, SlotToReg, RegToSlot, SlotToReg, SlotToReg,
|
|
SlotToReg, Branch, FunctionReturn, Transfer, SlotToReg,
|
|
Branch, SlotToReg, Syscall, NilClass]
|
|
assert_equal 0 , get_return
|
|
end
|
|
def test_zero
|
|
ticks( 12 )
|
|
assert @interpreter.flags[:zero]
|
|
end
|
|
def test_op
|
|
op = main_ticks(35)
|
|
assert_equal OperatorInstruction , op.class
|
|
assert_equal :r1 , op.left.symbol
|
|
assert_equal :r2 , op.right.symbol
|
|
assert_equal 2**31 , @interpreter.get_register(:r2)
|
|
assert_equal 0 , @interpreter.get_register(:r1)
|
|
end
|
|
def test_overflow
|
|
main_ticks( 37 )
|
|
assert @interpreter.flags[:overflow]
|
|
end
|
|
end
|
|
end
|