1 # frozen_string_literal: true
2
3 require "test_helper"
4
5
6 module Umu
7
8 module Test
9
10 class BasicTest < Minitest::Test
11 def setup
12 @interp = Api.setup_interpreter
13 end
14
15
16 def test_that_it_has_a_version_number
17 refute_nil VERSION
18 end
19
20
21 def test_constant
22 value = Api.eval_expr @interp, "3"
23
24 assert_instance_of VCAN::Int, value
25 assert_equal 3, value.val
26 end
27
28
29 def test_variable_bool
30 value = Api.eval_expr @interp, "TRUE"
31
32 assert_instance_of VCA::Bool, value
33 assert_equal true, value.val
34 end
35
36
37 def test_variable_fun
38 value = Api.eval_expr @interp, "(+)"
39
40 assert_instance_of VC::Fun, value
41 end
42
43
44 def test_send_expression
45 value = Api.eval_expr @interp, "3.+ 4"
46
47 assert_instance_of VCAN::Int, value
48 assert_equal 7, value.val
49 end
50
51
52 def test_infix_expression
53 value = Api.eval_expr @interp, "3 + 4"
54
55 assert_instance_of VCAN::Int, value
56 assert_equal 7, value.val
57 end
58
59
60 def test_declare_value
61 interp_1 = Api.eval_decls @interp, "val x=3 val y=4"
62 value = Api.eval_expr interp_1, "x + y"
63
64 assert_instance_of VCAN::Int, value
65 assert_equal 7, value.val
66 end
67
68
69 def test_declare_fun_fact
70 interp_1 = Api.eval_decls @interp, <<-EOS
71 fun rec fact = x -> (
72 if x <= 1 then
73 1
74 else
75 x * fact (x - 1)
76 )
77 EOS
78
79 value = Api.eval_expr interp_1, "fact 3"
80 assert_instance_of VCAN::Int, value
81 assert_equal 6, value.val
82
83 value = Api.eval_expr interp_1, "fact 4"
84 assert_instance_of VCAN::Int, value
85 assert_equal 24, value.val
86 end
87 end
88
89 end # Umu::Test
90
91 end # Umu