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 Declaration
15
16 class ValueTest < Minitest::Test
17 =begin
18 <value-declaration> ::=
19 VAL <pattern> "=" <expression>
20 [ WHERE "{" { <declaration> } "}"
21 ;
22 =end
23 def setup
24 @interp = Api.setup_interpreter
25 end
26
27
28 def test_value
29 interp = Api.eval_decls @interp, "val x = 3"
30
31 value = Api.eval_expr interp, "x"
32 assert_instance_of VCAN::Int, value
33 assert_equal 3, value.val
34 end
35
36
37 def test_with_empty_declaration
38 interp = Api.eval_decls @interp, "val x = 3 where { }"
39
40 value = Api.eval_expr interp, "x"
41 assert_instance_of VCAN::Int, value
42 assert_equal 3, value.val
43 end
44
45
46 def test_with_single_declaration
47 interp = Api.eval_decls @interp, "val x = y where { val y = 3 }"
48
49 value = Api.eval_expr interp, "x"
50 assert_instance_of VCAN::Int, value
51 assert_equal 3, value.val
52 end
53
54
55 def test_with_some_declarations
56 interp = Api.eval_decls @interp, <<-EOS
57 val x = y + z where { val y = 3 val z = 4 }
58 EOS
59
60 value = Api.eval_expr interp, "x"
61 assert_instance_of VCAN::Int, value
62 assert_equal 7, value.val
63 end
64 end
65
66 end # Umu::Test::Grammar::CoreLanguage::Declaration
67
68 end # Umu::Test::Grammar::CoreLanguage
69
70 end # Umu::Test::Grammar
71
72 end # Umu::Test
73
74 end # Umu