tests for all macros
generated on master (know to work) but with rXX registers, needs fixing
This commit is contained in:
parent
9c5d17a3bb
commit
3575aada17
@ -12,6 +12,50 @@ module SlotMachine
|
||||
@method
|
||||
end
|
||||
|
||||
def risc(at)
|
||||
@risc_i = @method.to_risc.risc_instructions unless @risc_i
|
||||
return @risc_i if at == 0
|
||||
@risc_i.next( at )
|
||||
end
|
||||
|
||||
def assert_return(at)
|
||||
assert_label risc(at) , "return_label"
|
||||
assert_slot_to_reg risc(at + 1) , :r0 , 5 , :r1
|
||||
assert_slot_to_reg risc(at + 2) , :r0 , 6 , :r2
|
||||
assert_reg_to_slot risc(at + 3) ,:r1 , :r2 , 5
|
||||
assert_slot_to_reg risc(at + 4) , :r0 , 4 , :r3
|
||||
assert_slot_to_reg risc(at + 5) , :r3 , 2 , :r3
|
||||
assert_slot_to_reg risc(at + 6) , :r0 , 6 , :r0
|
||||
assert_equal Risc::FunctionReturn , risc(at + 7).class
|
||||
assert_label risc(at + 8) , "unreachable"
|
||||
end
|
||||
def assert_allocate
|
||||
assert_load risc(1) , Parfait::Factory
|
||||
assert_slot_to_reg risc(2) , :r2 , 2 , :r1
|
||||
assert_load risc(3) , Parfait::NilClass
|
||||
assert_operator risc(4) , :- , :r3 , :r1
|
||||
assert_equal Risc::IsNotZero , risc(5).class
|
||||
assert risc(5).label.name.to_s.start_with?("cont_label")
|
||||
assert_slot_to_reg risc(6) , :r2 , 3 , :r4
|
||||
assert_reg_to_slot risc(7) ,:r4 , :r2 , 2
|
||||
assert_load risc(8) , Parfait::CallableMethod
|
||||
assert_slot_to_reg risc(9) , :r0 , 1 , :r6
|
||||
assert_reg_to_slot risc(10) , :r5 , :r6 , 7
|
||||
assert_load risc(11) , Parfait::Factory
|
||||
assert_reg_to_slot risc(12) , :r7 , :r0 , 2
|
||||
assert_load risc(13) , Risc::Label
|
||||
assert_slot_to_reg risc(14) , :r0 , 1 , :r9
|
||||
assert_slot_to_reg risc(14),:r0,1,:r9
|
||||
assert_reg_to_slot risc(15),:r8,:r9,4
|
||||
assert_slot_to_reg risc(16),:r0 , 1 , :r0
|
||||
assert_equal Risc::FunctionCall, risc(17).class
|
||||
assert_equal :main, risc(17).method.name
|
||||
assert_label risc(18) , "continue_"
|
||||
assert_slot_to_reg risc(19) , :r2 , 2 , :r1
|
||||
assert_label risc(20) ,"cont_label_"
|
||||
assert_slot_to_reg risc(21) , :r1 , 1 , :r4
|
||||
assert_reg_to_slot risc(22) , :r4 , :r2 , 2
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
@ -32,6 +32,27 @@ module SlotMachine
|
||||
def test_risc_length
|
||||
assert_equal 24 , @method.to_risc.risc_instructions.length
|
||||
end
|
||||
def test_all
|
||||
assert_slot_to_reg risc(1),:r0 , 2 , :r1
|
||||
assert_slot_to_reg risc(2),:r1 , 2 , :r1
|
||||
assert_slot_to_reg risc(3),:r0 , 9 , :r2
|
||||
assert_slot_to_reg risc(4),:r2 , 2 , :r2
|
||||
assert_operator risc(5) , :- , :r1 , :r2
|
||||
assert_minus risc(6) , "false_label_"
|
||||
assert_zero risc(7) , "false_label_"
|
||||
assert_load risc(8) , Parfait::TrueClass
|
||||
assert_branch risc(9) , "merge_label_"
|
||||
assert_label risc(10) , "false_label_"
|
||||
assert_load risc(11) , Parfait::FalseClass
|
||||
assert_label risc(12) , "merge_label_"
|
||||
assert_reg_to_slot risc(13) , :r3 , :r0 , 5
|
||||
assert_slot_to_reg risc(14),:r0 , 5 , :r2
|
||||
assert_reg_to_slot risc(15) , :r2 , :r0 , 5
|
||||
assert_branch risc(16) , "return_label"
|
||||
end
|
||||
def test_return
|
||||
assert_return(17)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
@ -16,6 +16,52 @@ module SlotMachine
|
||||
def test_risc_length
|
||||
assert_equal 69 , @method.to_risc.risc_instructions.length
|
||||
end
|
||||
def test_allocate
|
||||
assert_allocate
|
||||
end
|
||||
def test_return
|
||||
assert_return(61)
|
||||
end
|
||||
def test_all
|
||||
assert_slot_to_reg risc(23) , :r0 , 2 , :r2
|
||||
assert_slot_to_reg risc(24) , :r2 , 2 , :r2
|
||||
assert_transfer risc(25) , :r2 , :r3
|
||||
assert_transfer risc(26) , :r2 , :r4
|
||||
assert_data risc(27) , 1
|
||||
assert_operator risc(28) , :>> , :r3 , :r5
|
||||
assert_data risc(29) , 2
|
||||
assert_operator risc(30) , :>> , :r4 , :r5
|
||||
assert_operator risc(31) , :+ , :r4 , :r3
|
||||
assert_data risc(32) , 4
|
||||
assert_transfer risc(33) , :r4 , :r3
|
||||
assert_operator risc(34) , :>> , :r4 , :r3
|
||||
assert_operator risc(35) , :+ , :r4 , :r3
|
||||
assert_data risc(36) , 8
|
||||
assert_transfer risc(37) , :r4 , :r3
|
||||
assert_operator risc(38) , :>> , :r3 , :r5
|
||||
assert_operator risc(39) , :+ , :r4 , :r3
|
||||
assert_data risc(40) , 16
|
||||
assert_transfer risc(41) , :r4 , :r3
|
||||
assert_operator risc(42) , :>> , :r3 , :r5
|
||||
assert_operator risc(43) , :+ , :r4 , :r3
|
||||
assert_data risc(44) , 3
|
||||
assert_operator risc(45) , :>> , :r4 , :r5
|
||||
assert_data risc(46) , 10
|
||||
assert_transfer risc(47) , :r4 , :r3
|
||||
assert_operator risc(48) , :* , :r3 , :r5
|
||||
assert_operator risc(49) , :- , :r2 , :r3
|
||||
assert_transfer risc(50) , :r2 , :r3
|
||||
assert_data risc(51) , 6
|
||||
assert_operator risc(52) , :+ , :r3 , :r5
|
||||
assert_data risc(53) , 4
|
||||
assert_operator risc(54) , :>> , :r3 , :r5
|
||||
assert_operator risc(55) , :+ , :r4 , :r3
|
||||
assert_reg_to_slot risc(56) , :r4 , :r1 , 2
|
||||
assert_reg_to_slot risc(57) , :r1 , :r0 , 5
|
||||
assert_slot_to_reg risc(58),:r0 , 5 , :r2
|
||||
assert_reg_to_slot risc(59) , :r2 , :r0 , 5
|
||||
assert_branch risc(60) , "return_label"
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
@ -17,6 +17,23 @@ module SlotMachine
|
||||
def test_risc_length
|
||||
assert_equal 41 , @method.to_risc.risc_instructions.length
|
||||
end
|
||||
def test_allocate
|
||||
assert_allocate
|
||||
end
|
||||
def test_return
|
||||
assert_return(32)
|
||||
end
|
||||
def test_all
|
||||
assert_slot_to_reg risc(23) , :r0 , 2 , :r2
|
||||
assert_slot_to_reg risc(24) , :r2 , 2 , :r2
|
||||
assert_data risc(25) , 2
|
||||
assert_operator risc(26) , :>> , :r2 , :r3
|
||||
assert_reg_to_slot risc(27) ,:r2 , :r1 , 2
|
||||
assert_reg_to_slot risc(28) ,:r1 , :r0 , 5
|
||||
assert_slot_to_reg risc(29) , :r0 , 5 , :r2
|
||||
assert_reg_to_slot risc(30) ,:r2 , :r0 , 5
|
||||
assert_branch risc(31) , "return_label"
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
@ -17,6 +17,24 @@ module SlotMachine
|
||||
def test_risc_length
|
||||
assert_equal 40 , @method.to_risc.risc_instructions.length
|
||||
end
|
||||
def test_allocate
|
||||
assert_allocate
|
||||
end
|
||||
def test_all
|
||||
assert_reg_to_slot risc(23) , :r1 , :r0 , 5
|
||||
assert_transfer risc(24) , :r0 , :r8
|
||||
assert_slot_to_reg risc(25),:r0 , 5 , :r0
|
||||
assert_slot_to_reg risc(26),:r0 , 2 , :r0
|
||||
assert_equal Risc::Syscall, risc(27).class
|
||||
assert_equal :exit , risc(27).name
|
||||
assert_slot_to_reg risc(28),:r0 , 5 , :r2
|
||||
assert_reg_to_slot risc(29) , :r2 , :r0 , 5
|
||||
assert_branch risc(30) , "return_label"
|
||||
assert_label risc(31) , "return_label"
|
||||
end
|
||||
def test_return
|
||||
assert_return(31)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
@ -17,6 +17,31 @@ module SlotMachine
|
||||
def test_risc_length
|
||||
assert_equal 41 , @method.to_risc.risc_instructions.length
|
||||
end
|
||||
def test_allocate
|
||||
assert_allocate
|
||||
end
|
||||
def test_all
|
||||
assert_slot_to_reg risc(23),:r0 , 2 , :r2
|
||||
assert_slot_to_reg risc(24),:r0 , 9 , :r3
|
||||
assert_slot_to_reg risc(25),:r3 , 2 , :r3
|
||||
|
||||
assert_equal Risc::ByteToReg , risc(26).class
|
||||
assert_equal :r2 , risc(26).array.symbol
|
||||
assert_equal :r2 , risc(26).register.symbol
|
||||
assert_equal :r3 , risc(26).index.symbol
|
||||
|
||||
|
||||
assert_reg_to_slot risc(27) , :r2 , :r1 , 2
|
||||
assert_reg_to_slot risc(28) , :r1 , :r0 , 5
|
||||
assert_slot_to_reg risc(29),:r0 , 5 , :r2
|
||||
assert_reg_to_slot risc(30) , :r2 , :r0 , 5
|
||||
|
||||
assert_branch risc(31) , "return_label"
|
||||
assert_label risc(32) , "return_label"
|
||||
end
|
||||
def test_return
|
||||
assert_return(32)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
@ -17,6 +17,20 @@ module SlotMachine
|
||||
def test_risc_length
|
||||
assert_equal 18 , @method.to_risc.risc_instructions.length
|
||||
end
|
||||
def test_all
|
||||
assert_slot_to_reg risc(1),:r0 , 2 , :r1
|
||||
assert_slot_to_reg risc(2),:r0 , 9 , :r2
|
||||
assert_slot_to_reg risc(3),:r2 , 2 , :r2
|
||||
assert_slot_to_reg risc(4),:r1 , :r2 , :r1
|
||||
assert_reg_to_slot risc(5) , :r1 , :r0 , 5
|
||||
assert_slot_to_reg risc(6),:r0 , 5 , :r2
|
||||
assert_reg_to_slot risc(7) , :r2 , :r0 , 5
|
||||
assert_branch risc(8) , "return_label"
|
||||
assert_label risc(9) , "return_label"
|
||||
end
|
||||
def test_return
|
||||
assert_return(9)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
@ -18,6 +18,28 @@ module SlotMachine
|
||||
def test_risc_length
|
||||
assert_equal 19 , @method.to_risc.risc_instructions.length
|
||||
end
|
||||
def test_all
|
||||
assert_load risc(1) , Parfait::Factory
|
||||
assert_slot_to_reg risc(2) , :r1 , 2 , :r0
|
||||
assert_slot_to_reg risc(3),:r0 , 1 , :r2
|
||||
assert_reg_to_slot risc(4) , :r2 , :r1 , 2
|
||||
assert_load risc(5) , Parfait::CallableMethod
|
||||
assert_slot_to_reg risc(6),:r0 , 1 , :r2
|
||||
assert_reg_to_slot risc(7) , :r1 , :r2 , 7
|
||||
assert_slot_to_reg risc(8),:r0 , 1 , :r0
|
||||
assert_load risc(9) , Parfait::Space
|
||||
assert_reg_to_slot risc(10) , :r3 , :r0 , 2
|
||||
assert_load risc(11) , Risc::Label
|
||||
assert_reg_to_slot risc(12) , :r4 , :r0 , 4
|
||||
assert_equal Risc::FunctionCall, risc(13).class
|
||||
assert_equal :main, risc(13).method.name
|
||||
assert_label risc(14) , "Object.__init__"
|
||||
assert_transfer risc(15) , :r0 , :r8
|
||||
assert_slot_to_reg risc(16),:r0 , 5 , :r0
|
||||
assert_slot_to_reg risc(17),:r0 , 2 , :r0
|
||||
assert_equal Risc::Syscall, risc(18).class
|
||||
assert_equal :exit, risc(18).name
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
@ -16,6 +16,18 @@ module SlotMachine
|
||||
def test_risc_length
|
||||
assert_equal 15 , @method.to_risc.risc_instructions.length
|
||||
end
|
||||
def test_all
|
||||
assert_transfer risc(1) , :r1 , :r1
|
||||
assert_equal Risc::Syscall, risc(2).class
|
||||
assert_slot_to_reg risc(3),:r0 , 5 , :r2
|
||||
assert_slot_to_reg risc(3),:r0 , 5 , :r2
|
||||
assert_reg_to_slot risc(4) , :r2 , :r0 , 5
|
||||
assert_branch risc(5) , "return_label"
|
||||
assert_label risc(6) , "return_label"
|
||||
end
|
||||
def test_return
|
||||
assert_return(6)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
@ -31,6 +31,25 @@ module SlotMachine
|
||||
def test_risc_length
|
||||
assert_equal 42 , @method.to_risc.risc_instructions.length
|
||||
end
|
||||
def test_allocate
|
||||
assert_allocate
|
||||
end
|
||||
def test_all
|
||||
assert_slot_to_reg risc(23),:r0 , 2 , :r2
|
||||
assert_slot_to_reg risc(24),:r2 , 2 , :r2
|
||||
assert_slot_to_reg risc(25),:r0 , 9 , :r3
|
||||
assert_slot_to_reg risc(26),:r3 , 2 , :r3
|
||||
assert_operator risc(27) , :| , :r2 , :r3
|
||||
assert_reg_to_slot risc(28) , :r2 , :r1 , 2
|
||||
assert_reg_to_slot risc(29) , :r1 , :r0 , 5
|
||||
assert_slot_to_reg risc(30),:r0 , 5 , :r2
|
||||
assert_reg_to_slot risc(31) , :r2 , :r0 , 5
|
||||
assert_branch risc(32) , "return_label"
|
||||
assert_label risc(33) , "return_label"
|
||||
end
|
||||
def test_return
|
||||
assert_return(33)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
@ -16,6 +16,27 @@ module SlotMachine
|
||||
def test_risc_length
|
||||
assert_equal 44 , @method.to_risc.risc_instructions.length
|
||||
end
|
||||
def test_allocate
|
||||
assert_allocate
|
||||
end
|
||||
def test_all
|
||||
assert_reg_to_slot risc(23) , :r1 , :r0 , 5
|
||||
assert_slot_to_reg risc(24),:r0 , 2 , :r1
|
||||
assert_slot_to_reg risc(25),:r1 , 1 , :r2
|
||||
assert_transfer risc(26) , :r0 , :r8
|
||||
assert_equal Risc::Syscall, risc(27).class
|
||||
assert_transfer risc(28) , :r0 , :r3
|
||||
assert_transfer risc(29) , :r8 , :r0
|
||||
assert_slot_to_reg risc(30),:r0 , 5 , :r4
|
||||
assert_reg_to_slot risc(31) , :r3 , :r4 , 2
|
||||
assert_slot_to_reg risc(32),:r0 , 5 , :r2
|
||||
assert_reg_to_slot risc(33) , :r2 , :r0 , 5
|
||||
assert_branch risc(34) , "return_label"
|
||||
assert_label risc(35) , "return_label"
|
||||
end
|
||||
def test_return
|
||||
assert_return(35)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
@ -17,6 +17,22 @@ module SlotMachine
|
||||
def test_risc_length
|
||||
assert_equal 20 , @method.to_risc.risc_instructions.length
|
||||
end
|
||||
def test_all
|
||||
assert_slot_to_reg risc(1),:r0 , 2 , :r1
|
||||
assert_slot_to_reg risc(2),:r0 , 10 , :r2
|
||||
assert_reg_to_slot risc(3) , :r2 , :r0 , 5
|
||||
assert_slot_to_reg risc(4),:r0 , 9 , :r3
|
||||
assert_slot_to_reg risc(5),:r3 , 2 , :r3
|
||||
assert_slot_to_reg risc(6),:r2 , 2 , :r2
|
||||
assert_equal Risc::RegToByte , risc(7).class
|
||||
assert_slot_to_reg risc(8),:r0 , 5 , :r2
|
||||
assert_reg_to_slot risc(9) , :r2 , :r0 , 5
|
||||
assert_branch risc(10) , "return_label"
|
||||
assert_label risc(11) , "return_label"
|
||||
end
|
||||
def test_return
|
||||
assert_return(11)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
@ -16,6 +16,21 @@ module SlotMachine
|
||||
def test_risc_length
|
||||
assert_equal 20 , @method.to_risc.risc_instructions.length
|
||||
end
|
||||
def test_all
|
||||
assert_slot_to_reg risc(1),:r0 , 2 , :r1
|
||||
assert_slot_to_reg risc(2),:r0 , 10 , :r2
|
||||
assert_reg_to_slot risc(3) , :r2 , :r0 , 5
|
||||
assert_slot_to_reg risc(4),:r0 , 9 , :r3
|
||||
assert_slot_to_reg risc(5),:r3 , 2 , :r3
|
||||
assert_slot_to_reg risc(6),:r2 , 2 , :r2
|
||||
assert_equal Risc::RegToByte , risc(7).class
|
||||
assert_slot_to_reg risc(8),:r0 , 5 , :r2
|
||||
assert_reg_to_slot risc(9) , :r2 , :r0 , 5
|
||||
assert_branch risc(10) , "return_label"
|
||||
end
|
||||
def test_return
|
||||
assert_return(11)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
@ -19,14 +19,23 @@ module Minitest
|
||||
def assert_slot_to_reg( slot , array = nil, index = nil , register = nil)
|
||||
assert_equal Risc::SlotToReg , slot.class
|
||||
assert_register( :source , array , slot.array)
|
||||
assert_equal( index , slot.index, "wrong source index") if index
|
||||
assert_register( :destination , register , slot.register )
|
||||
assert_index( :source , slot , index)
|
||||
end
|
||||
def assert_reg_to_slot( slot , register = nil, array = nil, index = nil )
|
||||
assert_equal Risc::RegToSlot , slot.class
|
||||
assert_register( :source , register , slot.register )
|
||||
assert_register( :destination , array , slot.array)
|
||||
assert_equal( index , slot.index, "wrong destination index") if index
|
||||
assert_index( :destination , slot , index)
|
||||
end
|
||||
def assert_index(kind , slot , index)
|
||||
return unless index
|
||||
if(slot.index.is_a?(Risc::RegisterValue))
|
||||
assert_equal( Symbol , index.class, "wrong #{kind} index class")
|
||||
assert_equal( index , slot.index.symbol, "wrong #{kind} index")
|
||||
else
|
||||
assert_equal( index , slot.index, "wrong #{kind} index")
|
||||
end
|
||||
end
|
||||
def assert_load(load , clazz = nil , register = nil)
|
||||
assert_equal Risc::LoadConstant , load.class
|
||||
@ -61,6 +70,10 @@ module Minitest
|
||||
assert_register :right , right , ins.right
|
||||
end
|
||||
def assert_zero ins , label
|
||||
assert_equal Risc::IsNotZero , ins.class
|
||||
assert_label ins.label , label
|
||||
end
|
||||
def assert_not_zero ins , label
|
||||
assert_equal Risc::IsZero , ins.class
|
||||
assert_label ins.label , label
|
||||
end
|
||||
@ -68,6 +81,13 @@ module Minitest
|
||||
assert_equal Risc::Syscall , ins.class
|
||||
assert_equal ins.name , name
|
||||
end
|
||||
|
||||
def assert_minus ins , label
|
||||
assert_equal Risc::IsMinus , ins.class
|
||||
assert_label ins.label , label
|
||||
end
|
||||
def assert_data(ins , data)
|
||||
assert_equal Risc::LoadData , ins.class
|
||||
assert_equal data , ins.constant
|
||||
end
|
||||
end
|
||||
end
|
||||
|
Loading…
x
Reference in New Issue
Block a user