always list of methods in class

improve vool test dirs
This commit is contained in:
Torsten Ruger
2018-06-30 10:08:18 +03:00
parent 46d8f5002f
commit 4a7cc72732
21 changed files with 7 additions and 10 deletions

44
test/vool/send/helper.rb Normal file
View 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

View 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

View 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

View 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

View 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

View 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

View 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