Starting to build detailed mom to risc test
so we can get rid of brittle risc folder tests All of those tests rely on many many implementation details should just test result through interpreter, no chain.
This commit is contained in:
@ -6,4 +6,31 @@ module Mom
|
||||
super("mocking")
|
||||
end
|
||||
end
|
||||
|
||||
class MomInstructionTest < MiniTest::Test
|
||||
include Output
|
||||
def setup
|
||||
Parfait.boot!(Parfait.default_test_options)
|
||||
@instruction = instruction
|
||||
@compiler = Risc::MethodCompiler.new(FakeCallable.new , Label.new("source","start"))
|
||||
@instruction.to_risc(@compiler)
|
||||
@risc = @compiler.risc_instructions
|
||||
end
|
||||
|
||||
def risc(at)
|
||||
return @risc if at == 0
|
||||
@risc.next( at )
|
||||
end
|
||||
|
||||
def all
|
||||
ret = []
|
||||
@risc.each {|i| ret << i}
|
||||
ret
|
||||
end
|
||||
|
||||
def all_str
|
||||
class_list(all.collect{|i|i.class})
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
|
36
test/mom/instruction/test_dynamic_call.rb
Normal file
36
test/mom/instruction/test_dynamic_call.rb
Normal file
@ -0,0 +1,36 @@
|
||||
require_relative "helper"
|
||||
|
||||
module Mom
|
||||
class TestDynamicCall < MomInstructionTest
|
||||
def instruction
|
||||
DynamicCall.new(nil,nil)
|
||||
end
|
||||
def test_len
|
||||
assert_equal 9 , all.length , all_str
|
||||
end
|
||||
def test_1_load
|
||||
assert_load risc(1) , Risc::Label , :r1
|
||||
end
|
||||
def test_2_slot
|
||||
assert_slot_to_reg risc(2) ,:r0 , 1 , :r2
|
||||
end
|
||||
def test_3_reg
|
||||
assert_reg_to_slot risc(3) , :r1 , :r2 , 4
|
||||
end
|
||||
def test_4_slot
|
||||
assert_slot_to_reg risc(4) ,:r0 , 1 , :r0
|
||||
end
|
||||
def test_5_load
|
||||
assert_load risc(5) , Parfait::CacheEntry , :r3
|
||||
end
|
||||
def test_6_slot
|
||||
assert_slot_to_reg risc(6) ,:r3 , 2 , :r3
|
||||
end
|
||||
def test_7_jump
|
||||
assert_equal Risc::DynamicJump , risc(7).class
|
||||
end
|
||||
def test_8_label
|
||||
assert_label risc(8) , "continue_"
|
||||
end
|
||||
end
|
||||
end
|
Reference in New Issue
Block a user