Fix all but one test
Riples upon riples. The one left looks like the genuine article
This commit is contained in:
parent
7c91a08d5b
commit
d3f3c91ae5
@ -39,7 +39,7 @@ module Ruby
|
|||||||
# rather than using a stack to do that at runtime
|
# rather than using a stack to do that at runtime
|
||||||
def normalize_arg(arg , statements)
|
def normalize_arg(arg , statements)
|
||||||
vool_arg = arg.to_vool
|
vool_arg = arg.to_vool
|
||||||
if arg.is_a?(Constant)
|
if arg.is_a?(Variable) || arg.is_a?(Constant)
|
||||||
return vool_arg
|
return vool_arg
|
||||||
end
|
end
|
||||||
if( vool_arg.is_a?(Vool::Statements))
|
if( vool_arg.is_a?(Vool::Statements))
|
||||||
|
@ -7,18 +7,17 @@ module Risc
|
|||||||
def setup
|
def setup
|
||||||
super
|
super
|
||||||
@input = "return 5.div4"
|
@input = "return 5.div4"
|
||||||
@expect = [LoadConstant, LoadConstant, SlotToReg, SlotToReg, RegToSlot,
|
@expect = [LoadConstant, LoadConstant, SlotToReg, SlotToReg, RegToSlot, #4
|
||||||
RegToSlot, RegToSlot, RegToSlot, LoadConstant, SlotToReg,
|
RegToSlot, RegToSlot, RegToSlot, LoadConstant, SlotToReg, #9
|
||||||
RegToSlot, LoadConstant, SlotToReg, RegToSlot, SlotToReg,
|
RegToSlot, LoadConstant, SlotToReg, RegToSlot, SlotToReg, #14
|
||||||
FunctionCall, Label, SlotToReg, SlotToReg, RegToSlot,
|
FunctionCall, Label, SlotToReg, RegToSlot, Branch] #19
|
||||||
SlotToReg, SlotToReg, RegToSlot, Branch]
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_return_instructions
|
def test_return_instructions
|
||||||
assert_nil msg = check_nil , msg
|
assert_nil msg = check_nil , msg
|
||||||
end
|
end
|
||||||
def test_function_return
|
def test_function_return
|
||||||
produced = produce_body.next(23)
|
produced = produce_body.next(19)
|
||||||
assert_equal Branch , produced.class
|
assert_equal Branch , produced.class
|
||||||
assert_equal "return_label" , produced.label.name
|
assert_equal "return_label" , produced.label.name
|
||||||
end
|
end
|
||||||
|
@ -7,14 +7,13 @@ module Risc
|
|||||||
def setup
|
def setup
|
||||||
super
|
super
|
||||||
@input = "while(5 > 0) ; @a = true; end"
|
@input = "while(5 > 0) ; @a = true; end"
|
||||||
@expect = [Label, LoadConstant, LoadConstant, SlotToReg, SlotToReg,
|
@expect = [Label, LoadConstant, LoadConstant, SlotToReg, SlotToReg, #4
|
||||||
RegToSlot, RegToSlot, RegToSlot, RegToSlot, LoadConstant,
|
RegToSlot, RegToSlot, RegToSlot, RegToSlot, LoadConstant, #9
|
||||||
SlotToReg, RegToSlot, LoadConstant, SlotToReg, SlotToReg,
|
SlotToReg, RegToSlot, LoadConstant, SlotToReg, SlotToReg, #14
|
||||||
RegToSlot, LoadConstant, SlotToReg, RegToSlot, SlotToReg,
|
RegToSlot, LoadConstant, SlotToReg, RegToSlot, SlotToReg, #19
|
||||||
FunctionCall, Label, SlotToReg, SlotToReg, RegToSlot,
|
FunctionCall, Label, SlotToReg, LoadConstant, OperatorInstruction, #24
|
||||||
SlotToReg, SlotToReg, LoadConstant, OperatorInstruction, IsZero,
|
IsZero, LoadConstant, OperatorInstruction, IsZero, LoadConstant, #29
|
||||||
LoadConstant, OperatorInstruction, IsZero, LoadConstant, SlotToReg,
|
SlotToReg, RegToSlot, Branch, Label] #34
|
||||||
RegToSlot, Branch, Label]
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_while_instructions
|
def test_while_instructions
|
||||||
@ -39,19 +38,19 @@ module Risc
|
|||||||
end
|
end
|
||||||
def test_false_check
|
def test_false_check
|
||||||
produced = produce_body
|
produced = produce_body
|
||||||
assert_equal Risc::IsZero , produced.next(29).class
|
assert_equal Risc::IsZero , produced.next(25).class
|
||||||
assert produced.next(29).label.name.start_with?("merge_label") , produced.next(29).label.name
|
assert produced.next(25).label.name.start_with?("merge_label") , produced.next(25).label.name
|
||||||
end
|
end
|
||||||
def test_nil_load
|
def test_nil_load
|
||||||
produced = produce_body
|
produced = produce_body
|
||||||
assert_equal Risc::LoadConstant , produced.next(30).class
|
assert_equal Risc::LoadConstant , produced.next(29).class
|
||||||
assert_equal Parfait::NilClass , produced.next(30).constant.class
|
assert_equal Parfait::TrueClass , produced.next(29).constant.class
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_back_jump # should jump back to condition label
|
def test_back_jump # should jump back to condition label
|
||||||
produced = produce_body
|
produced = produce_body
|
||||||
assert_equal Risc::Branch , produced.next(36).class
|
assert_equal Risc::Branch , produced.next(32).class
|
||||||
assert_equal produced , produced.next(36).label
|
assert_equal produced.name , produced.next(32).label.name
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
@ -10,7 +10,7 @@ module Risc
|
|||||||
end
|
end
|
||||||
|
|
||||||
def test_chain
|
def test_chain
|
||||||
#show_main_ticks # get output of what is
|
# show_main_ticks # get output of what is
|
||||||
check_main_chain [LoadConstant, SlotToReg, RegToSlot, LoadConstant, SlotToReg,
|
check_main_chain [LoadConstant, SlotToReg, RegToSlot, LoadConstant, SlotToReg,
|
||||||
RegToSlot, LoadConstant, LoadConstant, SlotToReg, SlotToReg, # 10
|
RegToSlot, LoadConstant, LoadConstant, SlotToReg, SlotToReg, # 10
|
||||||
RegToSlot, RegToSlot, RegToSlot, Branch, RegToSlot,
|
RegToSlot, RegToSlot, RegToSlot, Branch, RegToSlot,
|
||||||
@ -25,15 +25,14 @@ module Risc
|
|||||||
SlotToReg, SlotToReg, RegToSlot, LoadConstant, RegToSlot, # 60
|
SlotToReg, SlotToReg, RegToSlot, LoadConstant, RegToSlot, # 60
|
||||||
Branch, SlotToReg, SlotToReg, RegToSlot, LoadConstant,
|
Branch, SlotToReg, SlotToReg, RegToSlot, LoadConstant,
|
||||||
SlotToReg, Branch, RegToSlot, RegToSlot, SlotToReg, # 70
|
SlotToReg, Branch, RegToSlot, RegToSlot, SlotToReg, # 70
|
||||||
SlotToReg, SlotToReg, FunctionReturn, SlotToReg, SlotToReg,
|
SlotToReg, SlotToReg, FunctionReturn, SlotToReg, RegToSlot,
|
||||||
RegToSlot, Branch, SlotToReg, SlotToReg, RegToSlot, # 80
|
Branch, SlotToReg, SlotToReg, RegToSlot, LoadConstant, # 80
|
||||||
|
SlotToReg, RegToSlot, RegToSlot, SlotToReg, SlotToReg,
|
||||||
|
SlotToReg, FunctionReturn, SlotToReg, SlotToReg, RegToSlot, # 90
|
||||||
Branch, SlotToReg, SlotToReg, RegToSlot, LoadConstant,
|
Branch, SlotToReg, SlotToReg, RegToSlot, LoadConstant,
|
||||||
SlotToReg, RegToSlot, RegToSlot, SlotToReg, SlotToReg, # 90
|
SlotToReg, RegToSlot, RegToSlot, SlotToReg, Branch, # 100
|
||||||
Branch, SlotToReg, FunctionReturn, SlotToReg, SlotToReg,
|
SlotToReg, SlotToReg, FunctionReturn, Transfer, SlotToReg,
|
||||||
RegToSlot, Branch, SlotToReg, SlotToReg, RegToSlot, # 100
|
SlotToReg, Syscall, NilClass, ]
|
||||||
LoadConstant, SlotToReg, RegToSlot, RegToSlot, SlotToReg,
|
|
||||||
Branch, SlotToReg, SlotToReg, FunctionReturn, Transfer, # 110
|
|
||||||
SlotToReg, SlotToReg, Syscall, NilClass, ]
|
|
||||||
assert_equal 10 , get_return
|
assert_equal 10 , get_return
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -24,15 +24,14 @@ module Risc
|
|||||||
RegToSlot, Branch, SlotToReg, SlotToReg, RegToSlot,
|
RegToSlot, Branch, SlotToReg, SlotToReg, RegToSlot,
|
||||||
LoadConstant, SlotToReg, RegToSlot, RegToSlot, SlotToReg, # 60
|
LoadConstant, SlotToReg, RegToSlot, RegToSlot, SlotToReg, # 60
|
||||||
SlotToReg, SlotToReg, Branch, FunctionReturn, SlotToReg,
|
SlotToReg, SlotToReg, Branch, FunctionReturn, SlotToReg,
|
||||||
SlotToReg, RegToSlot, Branch, SlotToReg, SlotToReg, # 70
|
RegToSlot, Branch, SlotToReg, SlotToReg, RegToSlot, # 70
|
||||||
RegToSlot, Branch, SlotToReg, SlotToReg, RegToSlot,
|
LoadConstant, SlotToReg, RegToSlot, RegToSlot, SlotToReg,
|
||||||
LoadConstant, SlotToReg, RegToSlot, RegToSlot, SlotToReg, # 80
|
SlotToReg, SlotToReg, FunctionReturn, SlotToReg, SlotToReg, # 80
|
||||||
SlotToReg, Branch, SlotToReg, FunctionReturn, SlotToReg,
|
Branch, RegToSlot, SlotToReg, SlotToReg, RegToSlot,
|
||||||
SlotToReg, Branch, RegToSlot, SlotToReg, SlotToReg, # 90
|
Branch, SlotToReg, SlotToReg, RegToSlot, LoadConstant, # 90
|
||||||
RegToSlot, Branch, SlotToReg, SlotToReg, RegToSlot,
|
SlotToReg, RegToSlot, RegToSlot, SlotToReg, Branch,
|
||||||
LoadConstant, SlotToReg, RegToSlot, RegToSlot, SlotToReg, # 100
|
SlotToReg, SlotToReg, FunctionReturn, Transfer, SlotToReg, # 100
|
||||||
Branch, SlotToReg, SlotToReg, FunctionReturn, Transfer,
|
SlotToReg, Syscall, NilClass, ]
|
||||||
SlotToReg, SlotToReg, Syscall, NilClass, ]
|
|
||||||
assert_equal 15 , get_return
|
assert_equal 15 , get_return
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -11,8 +11,8 @@ module Risc
|
|||||||
end
|
end
|
||||||
|
|
||||||
def test_chain
|
def test_chain
|
||||||
#show_base_ticks # get output of what is
|
# show_main_ticks # get output of what is
|
||||||
check_main_chain [LoadConstant, LoadConstant, SlotToReg, SlotToReg, RegToSlot,
|
check_main_chain [LoadConstant, LoadConstant, SlotToReg, SlotToReg, RegToSlot,
|
||||||
RegToSlot, RegToSlot, RegToSlot, LoadConstant, SlotToReg, # 10
|
RegToSlot, RegToSlot, RegToSlot, LoadConstant, SlotToReg, # 10
|
||||||
RegToSlot, LoadConstant, SlotToReg, Branch, SlotToReg,
|
RegToSlot, LoadConstant, SlotToReg, Branch, SlotToReg,
|
||||||
RegToSlot, LoadConstant, SlotToReg, RegToSlot, SlotToReg, # 20
|
RegToSlot, LoadConstant, SlotToReg, RegToSlot, SlotToReg, # 20
|
||||||
@ -22,11 +22,10 @@ module Risc
|
|||||||
RegToSlot, RegToSlot, SlotToReg, SlotToReg, RegToSlot, # 40
|
RegToSlot, RegToSlot, SlotToReg, SlotToReg, RegToSlot, # 40
|
||||||
LoadConstant, SlotToReg, RegToSlot, Branch, RegToSlot,
|
LoadConstant, SlotToReg, RegToSlot, Branch, RegToSlot,
|
||||||
SlotToReg, SlotToReg, SlotToReg, FunctionReturn, SlotToReg, # 50
|
SlotToReg, SlotToReg, SlotToReg, FunctionReturn, SlotToReg, # 50
|
||||||
SlotToReg, RegToSlot, SlotToReg, SlotToReg, RegToSlot,
|
RegToSlot, Branch, SlotToReg, SlotToReg, RegToSlot,
|
||||||
Branch, Branch, SlotToReg, SlotToReg, RegToSlot, # 60
|
Branch, LoadConstant, SlotToReg, RegToSlot, RegToSlot, # 60
|
||||||
LoadConstant, SlotToReg, RegToSlot, RegToSlot, SlotToReg,
|
SlotToReg, SlotToReg, SlotToReg, FunctionReturn, Transfer,
|
||||||
SlotToReg, SlotToReg, FunctionReturn, Transfer, SlotToReg, # 70
|
SlotToReg, SlotToReg, Syscall, NilClass, ]
|
||||||
SlotToReg, Syscall, NilClass, ]
|
|
||||||
assert_equal 10 , get_return
|
assert_equal 10 , get_return
|
||||||
end
|
end
|
||||||
def base_ticks(num)
|
def base_ticks(num)
|
||||||
|
@ -10,8 +10,8 @@ module Risc
|
|||||||
end
|
end
|
||||||
|
|
||||||
def test_chain
|
def test_chain
|
||||||
#show_main_ticks # get output of what is
|
# show_main_ticks # get output of what is
|
||||||
check_main_chain [LoadConstant, LoadConstant, SlotToReg, SlotToReg, RegToSlot,
|
check_main_chain [LoadConstant, LoadConstant, SlotToReg, SlotToReg, RegToSlot,
|
||||||
RegToSlot, RegToSlot, RegToSlot, LoadConstant, SlotToReg, # 10
|
RegToSlot, RegToSlot, RegToSlot, LoadConstant, SlotToReg, # 10
|
||||||
RegToSlot, LoadConstant, SlotToReg, Branch, RegToSlot,
|
RegToSlot, LoadConstant, SlotToReg, Branch, RegToSlot,
|
||||||
SlotToReg, FunctionCall, LoadConstant, SlotToReg, LoadConstant, # 20
|
SlotToReg, FunctionCall, LoadConstant, SlotToReg, LoadConstant, # 20
|
||||||
@ -26,11 +26,10 @@ module Risc
|
|||||||
RegToSlot, RegToSlot, SlotToReg, SlotToReg, RegToSlot,
|
RegToSlot, RegToSlot, SlotToReg, SlotToReg, RegToSlot,
|
||||||
LoadConstant, SlotToReg, Branch, RegToSlot, RegToSlot, # 70
|
LoadConstant, SlotToReg, Branch, RegToSlot, RegToSlot, # 70
|
||||||
SlotToReg, SlotToReg, SlotToReg, FunctionReturn, SlotToReg,
|
SlotToReg, SlotToReg, SlotToReg, FunctionReturn, SlotToReg,
|
||||||
SlotToReg, RegToSlot, SlotToReg, SlotToReg, RegToSlot, # 80
|
RegToSlot, Branch, SlotToReg, SlotToReg, RegToSlot, # 80
|
||||||
Branch, SlotToReg, SlotToReg, RegToSlot, Branch,
|
LoadConstant, SlotToReg, RegToSlot, RegToSlot, Branch,
|
||||||
LoadConstant, SlotToReg, RegToSlot, RegToSlot, SlotToReg, # 90
|
SlotToReg, SlotToReg, SlotToReg, FunctionReturn, Transfer, # 90
|
||||||
SlotToReg, SlotToReg, FunctionReturn, Transfer, SlotToReg,
|
SlotToReg, SlotToReg, Syscall, NilClass, ]
|
||||||
SlotToReg, Syscall, NilClass, ]
|
|
||||||
assert_equal 2 , get_return
|
assert_equal 2 , get_return
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -44,7 +43,7 @@ module Risc
|
|||||||
assert_load load_ins, Parfait::Factory
|
assert_load load_ins, Parfait::Factory
|
||||||
end
|
end
|
||||||
def test_return_class
|
def test_return_class
|
||||||
ret = main_ticks(93)
|
ret = main_ticks(89)
|
||||||
assert_equal FunctionReturn , ret.class
|
assert_equal FunctionReturn , ret.class
|
||||||
link = @interpreter.get_register( ret.register )
|
link = @interpreter.get_register( ret.register )
|
||||||
assert_equal ::Integer , link.class
|
assert_equal ::Integer , link.class
|
||||||
|
@ -19,12 +19,11 @@ module Risc
|
|||||||
SlotToReg, SlotToReg, SlotToReg, ByteToReg, RegToSlot,
|
SlotToReg, SlotToReg, SlotToReg, ByteToReg, RegToSlot,
|
||||||
RegToSlot, SlotToReg, SlotToReg, RegToSlot, LoadConstant, # 40
|
RegToSlot, SlotToReg, SlotToReg, RegToSlot, LoadConstant, # 40
|
||||||
SlotToReg, RegToSlot, RegToSlot, Branch, SlotToReg,
|
SlotToReg, RegToSlot, RegToSlot, Branch, SlotToReg,
|
||||||
SlotToReg, SlotToReg, FunctionReturn, SlotToReg, SlotToReg, # 50
|
SlotToReg, SlotToReg, FunctionReturn, SlotToReg, RegToSlot, # 50
|
||||||
RegToSlot, SlotToReg, SlotToReg, RegToSlot, Branch,
|
Branch, SlotToReg, SlotToReg, RegToSlot, Branch,
|
||||||
Branch, SlotToReg, SlotToReg, RegToSlot, LoadConstant, # 60
|
LoadConstant, SlotToReg, RegToSlot, RegToSlot, SlotToReg, # 60
|
||||||
SlotToReg, RegToSlot, RegToSlot, SlotToReg, SlotToReg,
|
SlotToReg, SlotToReg, FunctionReturn, Transfer, SlotToReg,
|
||||||
SlotToReg, FunctionReturn, Transfer, SlotToReg, SlotToReg, # 70
|
SlotToReg, Syscall, NilClass, ]
|
||||||
Syscall, NilClass, ]
|
|
||||||
assert_equal "H".ord , get_return
|
assert_equal "H".ord , get_return
|
||||||
end
|
end
|
||||||
def test_byte_to_reg
|
def test_byte_to_reg
|
||||||
|
@ -21,11 +21,10 @@ module Risc
|
|||||||
RegToSlot, RegToSlot, SlotToReg, SlotToReg, RegToSlot, # 40
|
RegToSlot, RegToSlot, SlotToReg, SlotToReg, RegToSlot, # 40
|
||||||
LoadConstant, SlotToReg, RegToSlot, Branch, RegToSlot,
|
LoadConstant, SlotToReg, RegToSlot, Branch, RegToSlot,
|
||||||
SlotToReg, SlotToReg, SlotToReg, FunctionReturn, SlotToReg, # 50
|
SlotToReg, SlotToReg, SlotToReg, FunctionReturn, SlotToReg, # 50
|
||||||
SlotToReg, RegToSlot, SlotToReg, SlotToReg, RegToSlot,
|
RegToSlot, Branch, SlotToReg, SlotToReg, RegToSlot,
|
||||||
Branch, Branch, SlotToReg, SlotToReg, RegToSlot, # 60
|
Branch, LoadConstant, SlotToReg, RegToSlot, RegToSlot, # 60
|
||||||
LoadConstant, SlotToReg, RegToSlot, RegToSlot, SlotToReg,
|
SlotToReg, SlotToReg, SlotToReg, FunctionReturn, Transfer,
|
||||||
SlotToReg, SlotToReg, FunctionReturn, Transfer, SlotToReg, # 70
|
SlotToReg, SlotToReg, Syscall, NilClass, ]
|
||||||
SlotToReg, Syscall, NilClass, ]
|
|
||||||
assert_equal 1 , get_return
|
assert_equal 1 , get_return
|
||||||
end
|
end
|
||||||
def test_op
|
def test_op
|
||||||
@ -38,10 +37,10 @@ module Risc
|
|||||||
assert_equal 5 , @interpreter.get_register(:r3)
|
assert_equal 5 , @interpreter.get_register(:r3)
|
||||||
end
|
end
|
||||||
def test_return
|
def test_return
|
||||||
ret = main_ticks(68)
|
ret = main_ticks(64)
|
||||||
assert_equal FunctionReturn , ret.class
|
assert_equal FunctionReturn , ret.class
|
||||||
assert_equal :r1 , ret.register.symbol
|
assert_equal :r1 , ret.register.symbol
|
||||||
assert_equal 23196 , @interpreter.get_register(ret.register)
|
assert_equal 23004 , @interpreter.get_register(ret.register)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -10,7 +10,7 @@ module Risc
|
|||||||
end
|
end
|
||||||
|
|
||||||
def test_chain
|
def test_chain
|
||||||
#show_main_ticks # get output of what is
|
# show_main_ticks # get output of what is
|
||||||
check_main_chain [LoadConstant, LoadConstant, SlotToReg, SlotToReg, RegToSlot,
|
check_main_chain [LoadConstant, LoadConstant, SlotToReg, SlotToReg, RegToSlot,
|
||||||
RegToSlot, RegToSlot, RegToSlot, LoadConstant, SlotToReg, # 10
|
RegToSlot, RegToSlot, RegToSlot, LoadConstant, SlotToReg, # 10
|
||||||
RegToSlot, LoadConstant, SlotToReg, Branch, RegToSlot,
|
RegToSlot, LoadConstant, SlotToReg, Branch, RegToSlot,
|
||||||
@ -19,12 +19,11 @@ module Risc
|
|||||||
Branch, SlotToReg, LoadData, OperatorInstruction, RegToSlot, # 30
|
Branch, SlotToReg, LoadData, OperatorInstruction, RegToSlot, # 30
|
||||||
RegToSlot, SlotToReg, SlotToReg, RegToSlot, LoadConstant,
|
RegToSlot, SlotToReg, SlotToReg, RegToSlot, LoadConstant,
|
||||||
SlotToReg, RegToSlot, RegToSlot, SlotToReg, Branch, # 40
|
SlotToReg, RegToSlot, RegToSlot, SlotToReg, Branch, # 40
|
||||||
SlotToReg, SlotToReg, FunctionReturn, SlotToReg, SlotToReg,
|
SlotToReg, SlotToReg, FunctionReturn, SlotToReg, RegToSlot,
|
||||||
RegToSlot, SlotToReg, SlotToReg, RegToSlot, Branch, # 50
|
Branch, SlotToReg, SlotToReg, RegToSlot, LoadConstant, # 50
|
||||||
SlotToReg, SlotToReg, RegToSlot, Branch, LoadConstant,
|
SlotToReg, RegToSlot, RegToSlot, Branch, SlotToReg,
|
||||||
SlotToReg, RegToSlot, RegToSlot, SlotToReg, SlotToReg, # 60
|
SlotToReg, SlotToReg, FunctionReturn, Transfer, SlotToReg, # 60
|
||||||
SlotToReg, FunctionReturn, Transfer, SlotToReg, SlotToReg,
|
SlotToReg, Syscall, NilClass, ]
|
||||||
Syscall, NilClass, ]
|
|
||||||
assert_equal 2 , get_return
|
assert_equal 2 , get_return
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -11,7 +11,7 @@ module Risc
|
|||||||
|
|
||||||
def test_mult
|
def test_mult
|
||||||
#show_main_ticks # get output of what is
|
#show_main_ticks # get output of what is
|
||||||
check_main_chain [LoadConstant, LoadConstant, SlotToReg, SlotToReg, RegToSlot,
|
check_main_chain [LoadConstant, LoadConstant, SlotToReg, SlotToReg, RegToSlot,
|
||||||
RegToSlot, RegToSlot, RegToSlot, LoadConstant, SlotToReg, # 10
|
RegToSlot, RegToSlot, RegToSlot, LoadConstant, SlotToReg, # 10
|
||||||
RegToSlot, LoadConstant, SlotToReg, Branch, SlotToReg,
|
RegToSlot, LoadConstant, SlotToReg, Branch, SlotToReg,
|
||||||
RegToSlot, LoadConstant, SlotToReg, RegToSlot, SlotToReg, # 20
|
RegToSlot, LoadConstant, SlotToReg, RegToSlot, SlotToReg, # 20
|
||||||
@ -21,11 +21,10 @@ module Risc
|
|||||||
RegToSlot, RegToSlot, SlotToReg, SlotToReg, RegToSlot, # 40
|
RegToSlot, RegToSlot, SlotToReg, SlotToReg, RegToSlot, # 40
|
||||||
LoadConstant, SlotToReg, RegToSlot, Branch, RegToSlot,
|
LoadConstant, SlotToReg, RegToSlot, Branch, RegToSlot,
|
||||||
SlotToReg, SlotToReg, SlotToReg, FunctionReturn, SlotToReg, # 50
|
SlotToReg, SlotToReg, SlotToReg, FunctionReturn, SlotToReg, # 50
|
||||||
SlotToReg, RegToSlot, SlotToReg, SlotToReg, RegToSlot,
|
RegToSlot, Branch, SlotToReg, SlotToReg, RegToSlot,
|
||||||
Branch, Branch, SlotToReg, SlotToReg, RegToSlot, # 60
|
Branch, LoadConstant, SlotToReg, RegToSlot, RegToSlot, # 60
|
||||||
LoadConstant, SlotToReg, RegToSlot, RegToSlot, SlotToReg,
|
SlotToReg, SlotToReg, SlotToReg, FunctionReturn, Transfer,
|
||||||
SlotToReg, SlotToReg, FunctionReturn, Transfer, SlotToReg, # 70
|
SlotToReg, SlotToReg, Syscall, NilClass, ]
|
||||||
SlotToReg, Syscall, NilClass, ]
|
|
||||||
assert_equal 0 , get_return
|
assert_equal 0 , get_return
|
||||||
end
|
end
|
||||||
def test_zero
|
def test_zero
|
||||||
|
@ -10,8 +10,8 @@ module Risc
|
|||||||
end
|
end
|
||||||
|
|
||||||
def test_chain
|
def test_chain
|
||||||
#show_base_ticks # get output of what is
|
# show_main_ticks # get output of what is
|
||||||
check_main_chain [LoadConstant, LoadConstant, SlotToReg, SlotToReg, RegToSlot,
|
check_main_chain [LoadConstant, LoadConstant, SlotToReg, SlotToReg, RegToSlot,
|
||||||
RegToSlot, RegToSlot, RegToSlot, LoadConstant, SlotToReg, # 10
|
RegToSlot, RegToSlot, RegToSlot, LoadConstant, SlotToReg, # 10
|
||||||
RegToSlot, LoadConstant, SlotToReg, Branch, SlotToReg,
|
RegToSlot, LoadConstant, SlotToReg, Branch, SlotToReg,
|
||||||
RegToSlot, LoadConstant, SlotToReg, RegToSlot, SlotToReg, # 20
|
RegToSlot, LoadConstant, SlotToReg, RegToSlot, SlotToReg, # 20
|
||||||
@ -21,11 +21,11 @@ module Risc
|
|||||||
RegToSlot, RegToSlot, SlotToReg, SlotToReg, RegToSlot, # 40
|
RegToSlot, RegToSlot, SlotToReg, SlotToReg, RegToSlot, # 40
|
||||||
LoadConstant, SlotToReg, RegToSlot, Branch, RegToSlot,
|
LoadConstant, SlotToReg, RegToSlot, Branch, RegToSlot,
|
||||||
SlotToReg, SlotToReg, SlotToReg, FunctionReturn, SlotToReg, # 50
|
SlotToReg, SlotToReg, SlotToReg, FunctionReturn, SlotToReg, # 50
|
||||||
SlotToReg, RegToSlot, SlotToReg, SlotToReg, RegToSlot,
|
RegToSlot, Branch, SlotToReg, SlotToReg, RegToSlot,
|
||||||
Branch, Branch, SlotToReg, SlotToReg, RegToSlot, # 60
|
Branch, LoadConstant, SlotToReg, RegToSlot, RegToSlot, # 60
|
||||||
LoadConstant, SlotToReg, RegToSlot, RegToSlot, SlotToReg,
|
SlotToReg, SlotToReg, SlotToReg, FunctionReturn, Transfer,
|
||||||
SlotToReg, SlotToReg, FunctionReturn, Transfer, SlotToReg, # 70
|
SlotToReg, SlotToReg, Syscall, NilClass, ]
|
||||||
SlotToReg, Syscall, NilClass, ]
|
|
||||||
assert_equal 10 , get_return
|
assert_equal 10 , get_return
|
||||||
end
|
end
|
||||||
def base_ticks(num)
|
def base_ticks(num)
|
||||||
|
@ -20,11 +20,11 @@ module Risc
|
|||||||
Transfer, Transfer, SlotToReg, RegToSlot, SlotToReg,
|
Transfer, Transfer, SlotToReg, RegToSlot, SlotToReg,
|
||||||
SlotToReg, RegToSlot, LoadConstant, SlotToReg, Branch, # 40
|
SlotToReg, RegToSlot, LoadConstant, SlotToReg, Branch, # 40
|
||||||
RegToSlot, RegToSlot, SlotToReg, SlotToReg, SlotToReg,
|
RegToSlot, RegToSlot, SlotToReg, SlotToReg, SlotToReg,
|
||||||
FunctionReturn, SlotToReg, SlotToReg, RegToSlot, SlotToReg, # 50
|
FunctionReturn, SlotToReg, RegToSlot, Branch, SlotToReg, # 50
|
||||||
SlotToReg, RegToSlot, Branch, SlotToReg, SlotToReg,
|
SlotToReg, RegToSlot, LoadConstant, SlotToReg, RegToSlot,
|
||||||
RegToSlot, Branch, LoadConstant, SlotToReg, RegToSlot, # 60
|
RegToSlot, Branch, SlotToReg, SlotToReg, SlotToReg, # 60
|
||||||
RegToSlot, SlotToReg, SlotToReg, SlotToReg, FunctionReturn,
|
FunctionReturn, Transfer, SlotToReg, SlotToReg, Syscall,
|
||||||
Transfer, SlotToReg, SlotToReg, Syscall, NilClass, ] # 70
|
NilClass, ]
|
||||||
assert_equal "Hello again" , @interpreter.stdout
|
assert_equal "Hello again" , @interpreter.stdout
|
||||||
assert_equal 11 , get_return #bytes written
|
assert_equal 11 , get_return #bytes written
|
||||||
end
|
end
|
||||||
@ -57,7 +57,7 @@ module Risc
|
|||||||
assert_reg_to_slot( sl , :r1 ,:r2 , 5)
|
assert_reg_to_slot( sl , :r1 ,:r2 , 5)
|
||||||
end
|
end
|
||||||
def test_return
|
def test_return
|
||||||
done = main_ticks(65)
|
done = main_ticks(61)
|
||||||
assert_equal FunctionReturn , done.class
|
assert_equal FunctionReturn , done.class
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -11,7 +11,7 @@ module Risc
|
|||||||
|
|
||||||
def test_chain
|
def test_chain
|
||||||
#show_main_ticks # get output of what is
|
#show_main_ticks # get output of what is
|
||||||
check_main_chain [LoadConstant, LoadConstant, SlotToReg, SlotToReg, RegToSlot,
|
check_main_chain [LoadConstant, LoadConstant, SlotToReg, SlotToReg, RegToSlot,
|
||||||
RegToSlot, RegToSlot, RegToSlot, LoadConstant, SlotToReg, # 10
|
RegToSlot, RegToSlot, RegToSlot, LoadConstant, SlotToReg, # 10
|
||||||
RegToSlot, LoadConstant, SlotToReg, Branch, SlotToReg,
|
RegToSlot, LoadConstant, SlotToReg, Branch, SlotToReg,
|
||||||
RegToSlot, LoadConstant, SlotToReg, SlotToReg, RegToSlot, # 20
|
RegToSlot, LoadConstant, SlotToReg, SlotToReg, RegToSlot, # 20
|
||||||
@ -20,10 +20,9 @@ module Risc
|
|||||||
SlotToReg, SlotToReg, RegToByte, SlotToReg, SlotToReg,
|
SlotToReg, SlotToReg, RegToByte, SlotToReg, SlotToReg,
|
||||||
RegToSlot, LoadConstant, SlotToReg, Branch, RegToSlot, # 40
|
RegToSlot, LoadConstant, SlotToReg, Branch, RegToSlot, # 40
|
||||||
RegToSlot, SlotToReg, SlotToReg, SlotToReg, FunctionReturn,
|
RegToSlot, SlotToReg, SlotToReg, SlotToReg, FunctionReturn,
|
||||||
SlotToReg, SlotToReg, Branch, RegToSlot, SlotToReg, # 50
|
SlotToReg, RegToSlot, Branch, Branch, SlotToReg, # 50
|
||||||
SlotToReg, RegToSlot, Branch, SlotToReg, SlotToReg,
|
SlotToReg, RegToSlot, LoadConstant, SlotToReg, RegToSlot,
|
||||||
RegToSlot, LoadConstant, SlotToReg, RegToSlot, RegToSlot, # 60
|
RegToSlot, SlotToReg, SlotToReg, SlotToReg, FunctionReturn, # 60
|
||||||
SlotToReg, Branch, SlotToReg, SlotToReg, FunctionReturn,
|
|
||||||
Transfer, SlotToReg, SlotToReg, Syscall, NilClass, ]
|
Transfer, SlotToReg, SlotToReg, Syscall, NilClass, ]
|
||||||
assert_equal "K".ord , get_return
|
assert_equal "K".ord , get_return
|
||||||
end
|
end
|
||||||
|
@ -35,11 +35,10 @@ module Risc
|
|||||||
OperatorInstruction, RegToSlot, RegToSlot, SlotToReg, SlotToReg, # 110
|
OperatorInstruction, RegToSlot, RegToSlot, SlotToReg, SlotToReg, # 110
|
||||||
RegToSlot, LoadConstant, SlotToReg, RegToSlot, RegToSlot,
|
RegToSlot, LoadConstant, SlotToReg, RegToSlot, RegToSlot,
|
||||||
SlotToReg, Branch, SlotToReg, SlotToReg, FunctionReturn, # 120
|
SlotToReg, Branch, SlotToReg, SlotToReg, FunctionReturn, # 120
|
||||||
SlotToReg, SlotToReg, RegToSlot, SlotToReg, SlotToReg,
|
SlotToReg, RegToSlot, Branch, SlotToReg, SlotToReg,
|
||||||
RegToSlot, Branch, SlotToReg, SlotToReg, Branch, # 130
|
RegToSlot, LoadConstant, SlotToReg, RegToSlot, Branch, # 130
|
||||||
RegToSlot, LoadConstant, SlotToReg, RegToSlot, RegToSlot,
|
RegToSlot, SlotToReg, SlotToReg, SlotToReg, FunctionReturn,
|
||||||
SlotToReg, SlotToReg, SlotToReg, FunctionReturn, Transfer, # 140
|
Transfer, SlotToReg, SlotToReg, Syscall, NilClass, ]# 140
|
||||||
SlotToReg, SlotToReg, Syscall, NilClass, ]
|
|
||||||
assert_equal ::Integer , get_return.class
|
assert_equal ::Integer , get_return.class
|
||||||
assert_equal 1 , get_return
|
assert_equal 1 , get_return
|
||||||
end
|
end
|
||||||
@ -60,13 +59,13 @@ module Risc
|
|||||||
assert_equal DynamicJump , cal.class
|
assert_equal DynamicJump , cal.class
|
||||||
end
|
end
|
||||||
def test_return
|
def test_return
|
||||||
ret = main_ticks(139)
|
ret = main_ticks(135)
|
||||||
assert_equal FunctionReturn , ret.class
|
assert_equal FunctionReturn , ret.class
|
||||||
link = @interpreter.get_register( ret.register )
|
link = @interpreter.get_register( ret.register )
|
||||||
assert_equal ::Integer , link.class
|
assert_equal ::Integer , link.class
|
||||||
end
|
end
|
||||||
def test_sys
|
def test_sys
|
||||||
sys = main_ticks(143)
|
sys = main_ticks(139)
|
||||||
assert_equal Syscall , sys.class
|
assert_equal Syscall , sys.class
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -1,20 +1,6 @@
|
|||||||
require_relative "helper"
|
require_relative "helper"
|
||||||
|
|
||||||
module Ruby
|
module Ruby
|
||||||
class TestYieldStatementVool < MiniTest::Test
|
|
||||||
include RubyTests
|
|
||||||
|
|
||||||
def setup()
|
|
||||||
input = "yield(0)"
|
|
||||||
@lst = compile( input ).to_vool
|
|
||||||
end
|
|
||||||
def test_block
|
|
||||||
assert_equal Vool::YieldStatement , @lst.class
|
|
||||||
end
|
|
||||||
def test_block_args
|
|
||||||
assert_equal Vool::IntegerConstant , @lst.arguments.first.class
|
|
||||||
end
|
|
||||||
end
|
|
||||||
class TestYieldStatement < MiniTest::Test
|
class TestYieldStatement < MiniTest::Test
|
||||||
include RubyTests
|
include RubyTests
|
||||||
|
|
||||||
@ -32,4 +18,18 @@ module Ruby
|
|||||||
assert_equal "yield(0)" , @lst.to_s
|
assert_equal "yield(0)" , @lst.to_s
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
class TestYieldStatementVool < MiniTest::Test
|
||||||
|
include RubyTests
|
||||||
|
|
||||||
|
def setup()
|
||||||
|
input = "yield(0)"
|
||||||
|
@lst = compile( input ).to_vool
|
||||||
|
end
|
||||||
|
def test_block
|
||||||
|
assert_equal Vool::YieldStatement , @lst.class
|
||||||
|
end
|
||||||
|
def test_block_args
|
||||||
|
assert_equal Vool::IntegerConstant , @lst.arguments.first.class
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
25
test/rubyx/parfait/README.md
Normal file
25
test/rubyx/parfait/README.md
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
# Test Parfait compilation
|
||||||
|
|
||||||
|
Parfait has tests in tests/parfait which test it using mri.
|
||||||
|
|
||||||
|
## Parsing and compiling Parfait
|
||||||
|
|
||||||
|
Since we need Parfait in the runtime, we need to parse it and compile it.
|
||||||
|
And since it is early days, we expect errors at every level during this process, which
|
||||||
|
means testing every layer for every file.
|
||||||
|
|
||||||
|
Rather than create parfait tests for every layer (ie in the vool/mom/risc directories)
|
||||||
|
we have one file per parfait file here. Each file tests all layers.
|
||||||
|
|
||||||
|
The usual workflow is to start with a new file and create tests for vool, mom, risc,binary
|
||||||
|
in that order. Possibly fixing the compiler on the way. Then adding the file to
|
||||||
|
the RubyXCompiler parfait load list.
|
||||||
|
|
||||||
|
## Testing compiled Parfait
|
||||||
|
|
||||||
|
The next step is to test the compiled parfait. Since we have tests, the best way would
|
||||||
|
be to parse and execute the tests. This would involve creating a mini MiniTest and some
|
||||||
|
fancy footwork in the compilation. But it should be possible to create one executable /
|
||||||
|
interpreted test for each of the exising Parfait test.
|
||||||
|
|
||||||
|
Alas, this is for another day.
|
13
test/rubyx/parfait/helper.rb
Normal file
13
test/rubyx/parfait/helper.rb
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
require_relative "../helper"
|
||||||
|
|
||||||
|
module RubyX
|
||||||
|
module ParfaitHelper
|
||||||
|
|
||||||
|
def load_parfait(file)
|
||||||
|
File.read File.expand_path("../../../../lib/parfait/#{file}.rb",__FILE__)
|
||||||
|
end
|
||||||
|
def compiler
|
||||||
|
RubyXCompiler.new(RubyX.default_test_options)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
25
test/rubyx/parfait/test_object.rb
Normal file
25
test/rubyx/parfait/test_object.rb
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
require_relative "helper"
|
||||||
|
|
||||||
|
module RubyX
|
||||||
|
|
||||||
|
class TestObjecCompile < MiniTest::Test
|
||||||
|
include ParfaitHelper
|
||||||
|
def source
|
||||||
|
load_parfait(:object2)
|
||||||
|
end
|
||||||
|
def test_load
|
||||||
|
assert source.include?("class Object")
|
||||||
|
assert source.length > 2000
|
||||||
|
end
|
||||||
|
def est_vool
|
||||||
|
vool = compiler.ruby_to_vool source
|
||||||
|
assert_equal Vool::ClassStatement , vool.class
|
||||||
|
assert_equal :Object , vool.name
|
||||||
|
end
|
||||||
|
def est_mom
|
||||||
|
vool = compiler.ruby_to_mom source
|
||||||
|
assert_equal Vool::ClassStatement , vool.class
|
||||||
|
assert_equal :Object , vool.name
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
@ -11,18 +11,18 @@ module VoolBlocks
|
|||||||
end
|
end
|
||||||
|
|
||||||
def test_condition
|
def test_condition
|
||||||
assert_equal TruthCheck , @ins.next(4).class
|
assert_equal TruthCheck , @ins.next(3).class
|
||||||
end
|
end
|
||||||
def test_condition_is_slot
|
def test_condition_is_slot
|
||||||
assert_equal SlotDefinition , @ins.next(4).condition.class , @ins
|
assert_equal SlotDefinition , @ins.next(3).condition.class , @ins
|
||||||
end
|
end
|
||||||
def test_hoisted_dynamic_call
|
def test_simple_call
|
||||||
assert_equal SimpleCall , @ins.next(2).class
|
assert_equal SimpleCall , @ins.next(2).class
|
||||||
assert_equal :div4 , @ins.next(2).method.name
|
assert_equal :div4 , @ins.next(2).method.name
|
||||||
end
|
end
|
||||||
def test_array
|
def test_array
|
||||||
check_array [MessageSetup, ArgumentTransfer, SimpleCall, SlotLoad, TruthCheck, Label ,
|
check_array [MessageSetup, ArgumentTransfer, SimpleCall, TruthCheck, Label ,
|
||||||
SlotLoad, Jump, Label, SlotLoad, Label,
|
SlotLoad, Jump, Label, SlotLoad, Label ,
|
||||||
Label, ReturnSequence, Label] , @ins
|
Label, ReturnSequence, Label] , @ins
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -5,12 +5,11 @@ module Vool
|
|||||||
include VoolCompile
|
include VoolCompile
|
||||||
|
|
||||||
def setup
|
def setup
|
||||||
Parfait.boot!(Parfait.default_test_options)
|
|
||||||
@compiler = compile_first_method( "a = 5; a.div4")
|
@compiler = compile_first_method( "a = 5; a.div4")
|
||||||
@ins = @compiler.mom_instructions.next
|
@ins = @compiler.mom_instructions.next
|
||||||
end
|
end
|
||||||
def test_check_type
|
def test_check_type
|
||||||
assert_equal NotSameCheck , @ins.next.class , @ins
|
assert_equal NotSameCheck , @ins.next(1).class , @ins
|
||||||
end
|
end
|
||||||
def test_type_update
|
def test_type_update
|
||||||
load = @ins.next(2)
|
load = @ins.next(2)
|
||||||
@ -27,9 +26,9 @@ module Vool
|
|||||||
end
|
end
|
||||||
|
|
||||||
def test_array
|
def test_array
|
||||||
check_array [SlotLoad, NotSameCheck, SlotLoad, ResolveMethod, Label, MessageSetup ,
|
check_array [SlotLoad, NotSameCheck, SlotLoad, ResolveMethod ,
|
||||||
ArgumentTransfer, DynamicCall, Label, ReturnSequence ,
|
Label, MessageSetup, ArgumentTransfer, DynamicCall, Label ,
|
||||||
Label] , @ins
|
ReturnSequence, Label] , @ins
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
@ -48,11 +48,11 @@ module Vool
|
|||||||
end
|
end
|
||||||
|
|
||||||
def test_return_is_last
|
def test_return_is_last
|
||||||
assert_equal ReturnJump , @ins.next(5).class
|
assert_equal ReturnJump , @ins.next(4).class
|
||||||
end
|
end
|
||||||
def test_array
|
def test_array
|
||||||
check_array [MessageSetup,ArgumentTransfer,SimpleCall,SlotLoad,
|
check_array [MessageSetup, ArgumentTransfer, SimpleCall, SlotLoad, ReturnJump ,
|
||||||
SlotLoad,ReturnJump, Label, ReturnSequence, Label] , @ins
|
Label, ReturnSequence, Label] , @ins
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -1,11 +1,32 @@
|
|||||||
require_relative "helper"
|
require_relative "helper"
|
||||||
|
|
||||||
module Vool
|
module Vool
|
||||||
module YieldBasics
|
class TestYieldArgsSendMom < MiniTest::Test
|
||||||
include Mom
|
include VoolCompile
|
||||||
|
|
||||||
|
def setup
|
||||||
|
Parfait.boot!(Parfait.default_test_options)
|
||||||
|
@compiler = compile_first_method( "return yield(1)" )
|
||||||
|
@ins = @compiler.mom_instructions.next
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_array
|
||||||
|
check_array [NotSameCheck, Label, MessageSetup, ArgumentTransfer, BlockYield ,
|
||||||
|
SlotLoad, ReturnJump, Label, ReturnSequence , Label] , @ins
|
||||||
|
end
|
||||||
def test_check_label
|
def test_check_label
|
||||||
assert_equal NotSameCheck, @ins.class
|
assert_equal NotSameCheck, @ins.class
|
||||||
assert @ins.false_jump.name.start_with?("method_ok_")
|
assert @ins.false_jump.name.start_with?("method_ok_") , @ins.false_jump.name
|
||||||
|
end
|
||||||
|
def test_transfer
|
||||||
|
assert_equal ArgumentTransfer, @ins.next(3).class
|
||||||
|
assert_equal 1, @ins.next(3).arguments.length
|
||||||
|
end
|
||||||
|
def test_args_one_l
|
||||||
|
left = @ins.next(3).arguments[0].left
|
||||||
|
assert_equal Symbol, left.known_object.class
|
||||||
|
assert_equal :message, left.known_object
|
||||||
|
assert_equal [:next_message, :arguments, 1], left.slots
|
||||||
end
|
end
|
||||||
def test_check_left
|
def test_check_left
|
||||||
assert_equal SlotDefinition, @ins.left.class
|
assert_equal SlotDefinition, @ins.left.class
|
||||||
@ -38,64 +59,37 @@ module Vool
|
|||||||
assert_equal SlotLoad, @ins.next(5).class
|
assert_equal SlotLoad, @ins.next(5).class
|
||||||
assert_equal :message, @ins.next(5).left.known_object
|
assert_equal :message, @ins.next(5).left.known_object
|
||||||
assert_equal :message, @ins.next(5).right.known_object
|
assert_equal :message, @ins.next(5).right.known_object
|
||||||
assert_equal :frame, @ins.next(5).left.slots.first
|
assert_equal [:return_value], @ins.next(5).left.slots
|
||||||
assert @ins.next(5).left.slots.last.to_s.start_with?("tmp_")
|
|
||||||
assert_equal [:return_value], @ins.next(5).right.slots
|
assert_equal [:return_value], @ins.next(5).right.slots
|
||||||
end
|
end
|
||||||
def test_return_load2
|
|
||||||
assert_equal SlotLoad, @ins.next(6).class
|
|
||||||
assert_equal :message, @ins.next(6).left.known_object
|
|
||||||
assert_equal :message, @ins.next(6).right.known_object
|
|
||||||
assert_equal :return_value, @ins.next(6).left.slots.first
|
|
||||||
assert_equal :frame, @ins.next(6).right.slots.first
|
|
||||||
assert @ins.next(6).right.slots.last.to_s.start_with?("tmp_")
|
|
||||||
end
|
|
||||||
def test_return
|
def test_return
|
||||||
assert_equal ReturnJump, @ins.next(7).class
|
assert_equal ReturnJump, @ins.next(6).class
|
||||||
end
|
|
||||||
end
|
|
||||||
class TestYieldArgsSendMom < MiniTest::Test
|
|
||||||
include VoolCompile
|
|
||||||
include YieldBasics
|
|
||||||
|
|
||||||
def setup
|
|
||||||
Parfait.boot!(Parfait.default_test_options)
|
|
||||||
@compiler = compile_first_method( "return yield(1)" )
|
|
||||||
@ins = @compiler.mom_instructions.next
|
|
||||||
end
|
|
||||||
|
|
||||||
def test_array
|
|
||||||
check_array [NotSameCheck, Label, MessageSetup, ArgumentTransfer, BlockYield ,
|
|
||||||
SlotLoad, SlotLoad, ReturnJump, Label, ReturnSequence ,
|
|
||||||
Label] , @ins
|
|
||||||
end
|
|
||||||
def test_transfer
|
|
||||||
assert_equal ArgumentTransfer, @ins.next(3).class
|
|
||||||
assert_equal 1, @ins.next(3).arguments.length
|
|
||||||
end
|
|
||||||
def test_args_one_l
|
|
||||||
left = @ins.next(3).arguments[0].left
|
|
||||||
assert_equal Symbol, left.known_object.class
|
|
||||||
assert_equal :message, left.known_object
|
|
||||||
assert_equal [:next_message, :arguments, 1], left.slots
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
class TestYieldNoArgsSendMom < MiniTest::Test
|
class TestYieldNoArgsSendMom < MiniTest::Test
|
||||||
include VoolCompile
|
include VoolCompile
|
||||||
include YieldBasics
|
|
||||||
def setup
|
def setup
|
||||||
Parfait.boot!(Parfait.default_test_options)
|
Parfait.boot!(Parfait.default_test_options)
|
||||||
@compiler = compile_first_method( "return yield" )
|
@compiler = compile_first_method( "return yield(some.extra.calls)" )
|
||||||
@ins = @compiler.mom_instructions.next
|
@ins = @compiler.mom_instructions.next
|
||||||
end
|
end
|
||||||
|
def test_check_label
|
||||||
|
assert_equal NotSameCheck, @ins.class
|
||||||
|
assert @ins.false_jump.name.start_with?("cache_ok_") , @ins.false_jump.name
|
||||||
|
end
|
||||||
def test_array
|
def test_array
|
||||||
check_array [NotSameCheck, Label, MessageSetup, ArgumentTransfer, BlockYield ,
|
check_array [NotSameCheck, SlotLoad, ResolveMethod, Label, MessageSetup ,
|
||||||
SlotLoad, SlotLoad, ReturnJump, Label, ReturnSequence ,
|
ArgumentTransfer, DynamicCall, SlotLoad, NotSameCheck, SlotLoad ,
|
||||||
Label] , @ins
|
ResolveMethod, Label, MessageSetup, ArgumentTransfer, DynamicCall ,
|
||||||
|
SlotLoad, NotSameCheck, SlotLoad, ResolveMethod, Label ,
|
||||||
|
MessageSetup, ArgumentTransfer, DynamicCall, SlotLoad, NotSameCheck ,
|
||||||
|
Label, MessageSetup, ArgumentTransfer, BlockYield, SlotLoad ,
|
||||||
|
ReturnJump, Label, ReturnSequence, Label] , @ins
|
||||||
end
|
end
|
||||||
def test_transfer
|
def test_transfer
|
||||||
assert_equal ArgumentTransfer, @ins.next(3).class
|
assert_equal ArgumentTransfer, @ins.next(5).class
|
||||||
assert_equal 0, @ins.next(3).arguments.length
|
assert_equal 0, @ins.next(5).arguments.length
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
Loading…
Reference in New Issue
Block a user