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 Atomic
17
18 class LambdaExpressionTest < Minitest::Test
19 =begin
20 <lambda-expression> ::=
21 "{" <pattern> { <pattern> } "->"
22 <expression>
23 [ WHERE { declaration> } ]
24 "}"
25 ;
26 =end
27
28
29 def setup
30 @interp = Api.setup_interpreter
31 end
32
33
34 def test_with_single_argument
35 value = Api.eval_expr @interp, "{ x -> x }"
36 assert_instance_of VC::Fun, value
37
38 value = Api.eval_expr @interp, "{ x -> x } 1"
39 assert_instance_of VCAN::Int, value
40 assert_equal 1, value.val
41 end
42
43
44 def test_with_some_argument
45 value = Api.eval_expr @interp, "{ x y -> x + y }"
46 assert_instance_of VC::Fun, value
47
48 value = Api.eval_expr @interp, "{ x y -> x + y } 3 4"
49 assert_instance_of VCAN::Int, value
50 assert_equal 7, value.val
51 end
52
53
54 def test_with_emptye_declaration
55 value = Api.eval_expr @interp, "{ x -> x + 4 where }"
56 assert_instance_of VC::Fun, value
57
58 value = Api.eval_expr @interp, "{ x -> x + 4 where } 3"
59 assert_instance_of VCAN::Int, value
60 assert_equal 7, value.val
61 end
62
63
64 def test_with_single_declaration
65 value = Api.eval_expr @interp, "{ x -> x + y where val y=4 }"
66 assert_instance_of VC::Fun, value
67
68 value = Api.eval_expr @interp, "{ x -> x + y where val y=4 } 3"
69 assert_instance_of VCAN::Int, value
70 assert_equal 7, value.val
71 end
72
73
74 def test_with_some_declarations
75 value = Api.eval_expr @interp, <<-EOS
76 { x -> x + y + z where val y=4 val z=5 }
77 EOS
78 assert_instance_of VC::Fun, value
79
80 value = Api.eval_expr @interp, <<-EOS
81 { x -> x + y + z where val y=4 val z=5 } 3
82 EOS
83 assert_instance_of VCAN::Int, value
84 assert_equal 12, value.val
85 end
86 end
87
88 end # Umu::Test::Grammar::CoreLanguage::Expression::Atomic
89
90 end # Umu::Test::Grammar::CoreLanguage::Expression
91
92 end # Umu::Test::Grammar::CoreLanguage
93
94 end # Umu::Test::Grammar
95
96 end # Umu::Test
97
98 end # Umu