1 # frozen_string_literal: true
2
3 require "test_helper"
4
5
6 module Umu
7
8 module Test
9
10 module Grammar
11
12 module CoreLanguage
13
14 module Expression
15
16 module Entry
17
18 class IfExpressionTest < Minitest::Test
19 =begin
20 <if-expression> ::=
21 IF <if-rule> { <elsif-rule> } ELSE <expression> ;
22
23 <elsif-rule> ::= "ELSIF" <if-rule> ;
24 <if-rule> ::= <expression> THEN <expression> ;
25 =end
26
27
28 def setup
29 @interp = Api.setup_interpreter
30 end
31
32
33 def test_if_expression
34 value = Api.eval_expr @interp, "if TRUE then 1 else 2"
35 assert_instance_of VCAN::Int, value
36 assert_equal 1, value.val
37
38 value = Api.eval_expr @interp, "if FALSE then 1 else 2"
39 assert_instance_of VCAN::Int, value
40 assert_equal 2, value.val
41 end
42
43
44 def test_with_elsif
45 value = Api.eval_expr @interp, <<-EOS
46 if TRUE then 1 elsif TRUE then 2 else 3
47 EOS
48 assert_instance_of VCAN::Int, value
49 assert_equal 1, value.val
50
51 value = Api.eval_expr @interp, <<-EOS
52 if FALSE then 1 elsif TRUE then 2 else 3
53 EOS
54 assert_instance_of VCAN::Int, value
55 assert_equal 2, value.val
56
57 value = Api.eval_expr @interp, <<-EOS
58 if FALSE then 1 elsif FALSE then 2 else 3
59 EOS
60 assert_instance_of VCAN::Int, value
61 assert_equal 3, value.val
62
63 value = Api.eval_expr @interp, <<-EOS
64 if TRUE then 1 elsif FALSE then 2 else 3
65 EOS
66 assert_instance_of VCAN::Int, value
67 assert_equal 1, value.val
68 end
69
70
71 def test_test_value_should_be_a_bool_type
72 assert_raises(X::TypeError) do
73 Api.eval_expr @interp, "if 3 then 1 else 2"
74 end
75 end
76 end
77
78 end # Umu::Test::Grammar::CoreLanguage::Expression::Entry
79
80 end # Umu::Test::Grammar::CoreLanguage::Expression
81
82 end # Umu::Test::Grammar::CoreLanguage
83
84 end # Umu::Test::Grammar
85
86 end # Umu::Test
87
88 end # Umu