Rename check_maker to equal_goto
will have different classes for different checks, started that
This commit is contained in:
60
test/slot_language/test_equal_goto.rb
Normal file
60
test/slot_language/test_equal_goto.rb
Normal file
@ -0,0 +1,60 @@
|
||||
require_relative "helper"
|
||||
|
||||
module SlotLanguage
|
||||
class TestEqualGoto < MiniTest::Test
|
||||
include SlotHelper
|
||||
|
||||
def do_check(check)
|
||||
assert_equal EqualGoto , check.class
|
||||
assert_equal Goto , check.goto.class
|
||||
assert_equal SlotMaker , check.left.class
|
||||
assert_equal SlotMaker , check.right.class
|
||||
end
|
||||
def test_equal_local
|
||||
check = compile("goto(exit_label) if(a == b)")
|
||||
do_check(check)
|
||||
assert_equal :a , check.left.names[0]
|
||||
assert_equal :b , check.right.names[0]
|
||||
end
|
||||
def test_equal_inst_left
|
||||
check = compile("goto(exit_label) if(@a == b)")
|
||||
do_check(check)
|
||||
assert_equal :@a , check.left.names[0]
|
||||
end
|
||||
def test_equal_inst_right
|
||||
check = compile("goto(exit_label) if(a == @b)")
|
||||
do_check(check)
|
||||
assert_equal :@b , check.right.names[0]
|
||||
end
|
||||
end
|
||||
|
||||
class TestEqualGotoFull < MiniTest::Test
|
||||
include SlotHelper
|
||||
def setup
|
||||
@expr = compile("start_label;goto(start_label) if( b == c)")
|
||||
end
|
||||
def test_2
|
||||
assert_equal Array , @expr.class
|
||||
assert_equal 2 , @expr.length
|
||||
end
|
||||
def test_label
|
||||
assert_equal SlotMachine::Label , @expr.first.class
|
||||
assert_equal :start_label , @expr.first.name
|
||||
end
|
||||
def test_conditional
|
||||
assert_equal EqualGoto , @expr.last.class
|
||||
assert_equal :start_label , @expr.last.goto.label.name
|
||||
end
|
||||
def test_same_label
|
||||
assert_equal @expr.first.object_id , @expr.last.goto.label.object_id
|
||||
end
|
||||
def test_expression_left
|
||||
assert_equal SlotMaker , @expr.last.left.class
|
||||
assert_equal [:b] , @expr.last.left.names
|
||||
end
|
||||
def test_expression_right
|
||||
assert_equal SlotMaker , @expr.last.right.class
|
||||
assert_equal [:c] , @expr.last.right.names
|
||||
end
|
||||
end
|
||||
end
|
@ -7,6 +7,9 @@ module SlotLanguage
|
||||
def test_init
|
||||
assert SlotCompiler.new
|
||||
end
|
||||
def test_labels
|
||||
assert SlotCompiler.new.labels.empty?
|
||||
end
|
||||
def test_compile
|
||||
assert_equal SlotMaker , compile("a").class
|
||||
end
|
||||
@ -25,11 +28,6 @@ module SlotLanguage
|
||||
def test_slot_load_linst_trav2
|
||||
assert_equal LoadMaker , compile_class("@a.c = b.c")
|
||||
end
|
||||
def test_if
|
||||
check = compile("goto(exit_label) if(a == b)")
|
||||
assert_equal CheckMaker , check.class
|
||||
assert_equal Goto , check.goto.class
|
||||
end
|
||||
def test_assign
|
||||
assign = compile("c = d")
|
||||
assert_equal LoadMaker , assign.class
|
||||
@ -42,12 +40,6 @@ module SlotLanguage
|
||||
assign = compile("c.next = d")
|
||||
assert_equal LoadMaker , assign.class
|
||||
end
|
||||
def test_multiline
|
||||
multi = compile("start_label;c = c.next;goto(start_label)")
|
||||
assert_equal Array , multi.class
|
||||
assert_equal SlotMachine::Label , multi.first.class
|
||||
assert_equal Goto , multi.last.class
|
||||
end
|
||||
def test_shift
|
||||
load = compile("word = name.member")
|
||||
assert_equal LoadMaker , load.class
|
||||
|
Reference in New Issue
Block a user