a89301d623
basic still #23 , now applied Basic size of 20, interpreter gets 50 and the full set is 1024 Tests run more than twice as fast!!
95 lines
2.4 KiB
Ruby
95 lines
2.4 KiB
Ruby
require_relative "helper"
|
|
|
|
module Risc
|
|
class TestInterpreterBasics < MiniTest::Test
|
|
def setup
|
|
Parfait.boot!(Parfait.default_test_options)
|
|
Risc.boot!
|
|
@linker = Mom::MomCompiler.new.translate(:interpreter)
|
|
end
|
|
|
|
def test_class
|
|
assert_equal Risc::Interpreter , Interpreter.new(@linker).class
|
|
end
|
|
def test_starts
|
|
interpreter = Interpreter.new(@linker)
|
|
@linker.position_all
|
|
assert_equal 0 , interpreter.start_program
|
|
end
|
|
def test_starts_stopped
|
|
assert_equal :stopped , Interpreter.new(@linker).state
|
|
end
|
|
def test_has_regs
|
|
assert_equal 12 , Interpreter.new(@linker).registers.length
|
|
end
|
|
def test_has_r0
|
|
assert_equal :r0 , Interpreter.new(@linker).registers.keys.first
|
|
end
|
|
end
|
|
class TestInterpreterStarts < MiniTest::Test
|
|
include Ticker
|
|
def setup
|
|
@string_input = as_main("return 5")
|
|
super
|
|
end
|
|
def test_started
|
|
assert_equal :running , @interpreter.state
|
|
end
|
|
def test_pos
|
|
assert_equal 1 , @interpreter.clock
|
|
end
|
|
end
|
|
class TestInterpreterTicks < MiniTest::Test
|
|
include Ticker
|
|
def setup
|
|
@string_input = as_main("return 5")
|
|
super
|
|
end
|
|
def test_tick1
|
|
assert_equal 2 , @interpreter.tick
|
|
end
|
|
def test_clock1
|
|
@interpreter.tick
|
|
assert_equal 2 , @interpreter.clock
|
|
end
|
|
def test_pc1
|
|
@interpreter.tick
|
|
assert_equal 21688 , @interpreter.pc
|
|
end
|
|
def test_tick2
|
|
@interpreter.tick
|
|
assert_equal 3 , @interpreter.tick
|
|
end
|
|
def test_clock2
|
|
@interpreter.tick
|
|
@interpreter.tick
|
|
assert_equal 3 , @interpreter.clock
|
|
end
|
|
def test_pc2
|
|
@interpreter.tick
|
|
@interpreter.tick
|
|
assert_equal 21692 , @interpreter.pc
|
|
end
|
|
def test_tick_14_jump
|
|
14.times {@interpreter.tick}
|
|
assert_equal Branch , @interpreter.instruction.class
|
|
end
|
|
def test_tick_14_bin
|
|
13.times {@interpreter.tick}
|
|
binary_pos = binary_position
|
|
@interpreter.tick #jump has no listener
|
|
@interpreter.tick
|
|
assert binary_pos.at != binary_position.at , "#{binary_pos}!=#{binary_position}"
|
|
end
|
|
def binary_position
|
|
pos = Position.get(@interpreter.instruction)
|
|
list = pos.event_table[:position_changed].first
|
|
assert_equal InstructionListener, list.class
|
|
Position.get(list.binary)
|
|
end
|
|
def test_tick_15 #more than a binary code worth
|
|
15.times {@interpreter.tick}
|
|
end
|
|
end
|
|
end
|