rubyx/test/vool/vool_compiler/test_if_statement.rb
Torsten Ruger 3702411043 first propper hoisting test
had to change course, normalising and object creation is not possible
in one go
have to now generate random tmp vars  that will have to be picked up
later (sorted by tmp_ prefix?)
2018-03-15 12:46:56 +05:30

96 lines
2.8 KiB
Ruby

require_relative 'helper'
module Vool
module VoolC
class TestIfStatement < MiniTest::Test
include VoolHelper
def basic_if
"if(10 < 12) ; a = true ; end"
end
def test_if_basic_hoist
lst = compile_main( basic_if )
assert_equal Statements , lst.class
assert_equal IfStatement , lst.statements[1].class
end
def pest_if_basic_cond
lst = RubyCompiler.compile( basic_if )
assert_equal SendStatement , lst.condition.class
end
def pest_if_basic_branches
lst = RubyCompiler.compile( basic_if )
assert_equal TrueConstant , lst.if_true.class
assert_nil lst.if_false
end
def double_if
"if(false) ; true ; else ; false; end"
end
def pest_if_double
lst = RubyCompiler.compile( double_if )
assert_equal IfStatement , lst.class
end
def pest_if_double_cond
lst = RubyCompiler.compile( double_if )
assert_equal FalseConstant , lst.condition.class
end
def pest_if_double_branches
lst = RubyCompiler.compile( double_if )
assert_equal TrueConstant , lst.if_true.class
assert_equal FalseConstant, lst.if_false.class
end
def reverse_if
"true if(false)"
end
def pest_if_reverse
lst = RubyCompiler.compile( reverse_if )
assert_equal IfStatement , lst.class
end
def pest_if_reverse_cond
lst = RubyCompiler.compile( reverse_if )
assert_equal FalseConstant , lst.condition.class
end
def pest_if_reverse_branches
lst = RubyCompiler.compile( reverse_if )
assert_equal TrueConstant , lst.if_true.class
assert_nil lst.if_false
end
def reverse_unless
"true unless(false)"
end
def pest_if_reverse
lst = RubyCompiler.compile( reverse_unless )
assert_equal IfStatement , lst.class
end
def pest_if_reverse_cond
lst = RubyCompiler.compile( reverse_unless )
assert_equal FalseConstant , lst.condition.class
end
def pest_if_reverse_branches
lst = RubyCompiler.compile( reverse_unless )
assert_nil lst.if_true
assert_equal TrueConstant ,lst.if_false.class
end
def ternary
"false ? true : false"
end
def pest_if_ternary
lst = RubyCompiler.compile( ternary )
assert_equal IfStatement , lst.class
end
def pest_if_ternary_cond
lst = RubyCompiler.compile( ternary )
assert_equal FalseConstant , lst.condition.class
end
def pest_if_ternary_branches
lst = RubyCompiler.compile( ternary )
assert_equal TrueConstant , lst.if_true.class
assert_equal FalseConstant, lst.if_false.class
end
end
end
end