tests for all macros

generated on master (know to work)
but with rXX registers, needs fixing
This commit is contained in:
Torsten 2020-03-06 18:09:56 +02:00
parent 9c5d17a3bb
commit 3575aada17
14 changed files with 313 additions and 3 deletions

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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