always list of methods in class
improve vool test dirs
This commit is contained in:
44
test/vool/send/helper.rb
Normal file
44
test/vool/send/helper.rb
Normal file
@ -0,0 +1,44 @@
|
||||
require_relative "../helper"
|
||||
|
||||
module Vool
|
||||
# relies on @ins and receiver_type method
|
||||
module SimpleSendHarness
|
||||
include MomCompile
|
||||
|
||||
def setup
|
||||
Parfait.boot!
|
||||
Risc::Builtin.boot_functions
|
||||
@ins = compile_first_method( send_method )
|
||||
end
|
||||
|
||||
def test_first_not_array
|
||||
assert Array != @ins.class , @ins
|
||||
end
|
||||
def test_class_compiles
|
||||
assert_equal Mom::MessageSetup , @ins.class , @ins
|
||||
end
|
||||
def test_two_instructions_are_returned
|
||||
assert_equal 3 , @ins.length , @ins
|
||||
end
|
||||
def test_receiver_move_class
|
||||
assert_equal Mom::ArgumentTransfer, @ins.next(1).class
|
||||
end
|
||||
def test_receiver_move
|
||||
assert_equal Mom::SlotDefinition, @ins.next.receiver.class
|
||||
end
|
||||
def test_receiver
|
||||
type , value = receiver
|
||||
assert_equal type, @ins.next.receiver.known_object.class
|
||||
assert_equal value, @ins.next.receiver.known_object.value
|
||||
end
|
||||
def test_call_is
|
||||
assert_equal Mom::SimpleCall, @ins.next(2).class
|
||||
end
|
||||
def test_call_has_method
|
||||
assert_equal Parfait::TypedMethod, @ins.next(2).method.class
|
||||
end
|
||||
def test_array
|
||||
check_array [Mom::MessageSetup,Mom::ArgumentTransfer,Mom::SimpleCall] , @ins
|
||||
end
|
||||
end
|
||||
end
|
33
test/vool/send/test_send_args_send.rb
Normal file
33
test/vool/send/test_send_args_send.rb
Normal file
@ -0,0 +1,33 @@
|
||||
require_relative "helper"
|
||||
|
||||
module Vool
|
||||
class TestSendArgsSendMom < MiniTest::Test
|
||||
include MomCompile
|
||||
include Mom
|
||||
|
||||
def setup
|
||||
Risc.machine.boot
|
||||
@ins = compile_first_method( "a = main(1 + 2)" )
|
||||
end
|
||||
|
||||
def test_array
|
||||
check_array [MessageSetup, ArgumentTransfer, SimpleCall, SlotLoad, MessageSetup ,
|
||||
ArgumentTransfer, SimpleCall, SlotLoad] , @ins
|
||||
end
|
||||
|
||||
def test_one_call
|
||||
assert_equal SimpleCall, @ins.next(2).class
|
||||
assert_equal :+, @ins.next(2).method.name
|
||||
end
|
||||
def test_two_call
|
||||
assert_equal SimpleCall, @ins.next(6).class
|
||||
assert_equal :main, @ins.next(6).method.name
|
||||
end
|
||||
def test_args_one_l
|
||||
left = @ins.next(1).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
|
35
test/vool/send/test_send_cached_simple.rb
Normal file
35
test/vool/send/test_send_cached_simple.rb
Normal file
@ -0,0 +1,35 @@
|
||||
require_relative "../helper"
|
||||
|
||||
module Vool
|
||||
class TestSendCachedSimpleMom < MiniTest::Test
|
||||
include MomCompile
|
||||
include Mom
|
||||
|
||||
def setup
|
||||
Risc.machine.boot
|
||||
@ins = compile_first_method( "a = 5; a.div4")
|
||||
end
|
||||
def test_check_type
|
||||
assert_equal NotSameCheck , @ins.next.class , @ins
|
||||
end
|
||||
def test_type_update
|
||||
load = @ins.next(2)
|
||||
assert_equal :message , load.right.known_object , load
|
||||
assert_equal :frame , load.right.slots[0] , load
|
||||
assert_equal :a , load.right.slots[1] , load
|
||||
assert_equal :type , load.right.slots[2] , load
|
||||
end
|
||||
def test_check_resolve_call
|
||||
assert_equal ResolveMethod , @ins.next(3).class , @ins
|
||||
end
|
||||
def test_dynamic_call_last
|
||||
assert_equal DynamicCall , @ins.last.class , @ins
|
||||
end
|
||||
|
||||
def test_array
|
||||
check_array [SlotLoad, NotSameCheck, SlotLoad, ResolveMethod, Label, MessageSetup ,
|
||||
ArgumentTransfer, DynamicCall] , @ins
|
||||
end
|
||||
|
||||
end
|
||||
end
|
33
test/vool/send/test_send_self.rb
Normal file
33
test/vool/send/test_send_self.rb
Normal file
@ -0,0 +1,33 @@
|
||||
require_relative "helper"
|
||||
|
||||
module Vool
|
||||
class TestSendSelfMom < MiniTest::Test
|
||||
include SimpleSendHarness
|
||||
include Mom
|
||||
|
||||
def send_method
|
||||
"self.get_internal_word(0)"
|
||||
end
|
||||
def test_receiver
|
||||
assert_equal SlotDefinition, @ins.next.receiver.class
|
||||
end
|
||||
def test_arg_one
|
||||
assert_equal SlotLoad, @ins.next(1).arguments[0].class
|
||||
end
|
||||
def test_call_two
|
||||
assert_equal SimpleCall, @ins.next(2).class
|
||||
end
|
||||
def test_call_has_method
|
||||
assert_equal Parfait::TypedMethod, @ins.next(2).method.class
|
||||
end
|
||||
def test_call_has_right_method
|
||||
assert_equal :get_internal_word, @ins.next(2).method.name
|
||||
end
|
||||
end
|
||||
class TestSendSelfImplicitMom < TestSendSelfMom
|
||||
|
||||
def send_method
|
||||
"get_internal_word(0)"
|
||||
end
|
||||
end
|
||||
end
|
18
test/vool/send/test_send_simple.rb
Normal file
18
test/vool/send/test_send_simple.rb
Normal file
@ -0,0 +1,18 @@
|
||||
require_relative "helper"
|
||||
|
||||
module Vool
|
||||
class TestSendSimpleMom < MiniTest::Test
|
||||
include SimpleSendHarness
|
||||
|
||||
def send_method
|
||||
"5.div4"
|
||||
end
|
||||
def receiver
|
||||
[Mom::IntegerConstant , 5]
|
||||
end
|
||||
def test_call_has_right_method
|
||||
assert_equal :div4, @ins.next(2).method.name
|
||||
end
|
||||
|
||||
end
|
||||
end
|
26
test/vool/send/test_send_simple_args.rb
Normal file
26
test/vool/send/test_send_simple_args.rb
Normal file
@ -0,0 +1,26 @@
|
||||
require_relative "helper"
|
||||
|
||||
module Vool
|
||||
class TestSendSimpleArgsMom < MiniTest::Test
|
||||
include SimpleSendHarness
|
||||
|
||||
def send_method
|
||||
"5.div4(1,2)"
|
||||
end
|
||||
|
||||
def receiver
|
||||
[Mom::IntegerConstant , 5]
|
||||
end
|
||||
def test_args_two_move
|
||||
assert_equal :next_message, @ins.next(1).arguments[1].left.slots[0]
|
||||
assert_equal :arguments, @ins.next(1).arguments[1].left.slots[1]
|
||||
end
|
||||
def test_args_two_str
|
||||
assert_equal Mom::IntegerConstant, @ins.next(1).arguments[1].right.known_object.class
|
||||
assert_equal 2, @ins.next(1).arguments[1].right.known_object.value
|
||||
end
|
||||
def test_array
|
||||
check_array [Mom::MessageSetup,Mom::ArgumentTransfer,Mom::SimpleCall] , @ins
|
||||
end
|
||||
end
|
||||
end
|
24
test/vool/send/test_send_simple_string.rb
Normal file
24
test/vool/send/test_send_simple_string.rb
Normal file
@ -0,0 +1,24 @@
|
||||
require_relative "helper"
|
||||
|
||||
module Vool
|
||||
class TestSendSimpleStringArgsMom < MiniTest::Test
|
||||
include SimpleSendHarness
|
||||
|
||||
def send_method
|
||||
"'5'.get_internal_byte(1)"
|
||||
end
|
||||
def receiver
|
||||
[Mom::StringConstant , "5"]
|
||||
end
|
||||
|
||||
def test_args_one_move
|
||||
assert_equal :next_message, @ins.next.arguments[0].left.slots[0]
|
||||
assert_equal :arguments, @ins.next.arguments[0].left.slots[1]
|
||||
end
|
||||
def test_args_one_str
|
||||
assert_equal Mom::IntegerConstant, @ins.next.arguments[0].right.known_object.class
|
||||
assert_equal 1, @ins.next.arguments[0].right.known_object.value
|
||||
assert_equal [:next_message, :arguments, 1], @ins.next.arguments[0].left.slots
|
||||
end
|
||||
end
|
||||
end
|
Reference in New Issue
Block a user