1 # frozen_string_literal: true
2
3 require "test_helper"
4
5
6 module Umu
7
8 module Test
9
10 module Library
11
12 module Class
13
14 module Union
15
16 module Result
17
18 class OkTest < Minitest::Test
19 def setup
20 @interp = Api.setup_interpreter
21 end
22
23
24 def test_cmeth_make
25 value = Api.eval_expr @interp, "&Ok.make @Apple"
26 assert_instance_of VCU::Result::Ok, value
27 assert_instance_of VCA::Symbol, value.contents
28 assert_equal :Apple, value.contents.val
29 end
30
31
32 def test_imeth_show
33 value = Api.eval_expr @interp, "&Ok.make @Apple.show"
34 assert_instance_of VCA::String, value
35 assert_equal '&Ok @Apple', value.val
36 end
37
38
39 def test_imeth_to_s
40 value = Api.eval_expr @interp, "&Ok.make @Apple.to-s"
41 assert_instance_of VCA::String, value
42 assert_equal '&Ok Apple', value.val
43 end
44
45
46 def test_imeth_is_ok
47 value = Api.eval_expr @interp, "&Ok.make @Apple.Ok?"
48 assert_instance_of VCA::Bool, value
49 assert_equal true, value.val
50 end
51
52
53 def test_imeth_is_err
54 value = Api.eval_expr @interp, "&Ok.make @Apple.Err?"
55 assert_instance_of VCA::Bool, value
56 assert_equal false, value.val
57 end
58
59
60 def test_imess_equal
61 interp_1 = Api.eval_decls @interp, <<-EOS
62 val o1 = &Ok.make @Apple
63 val o2 = &Ok.make @Apple
64 EOS
65
66 value = Api.eval_expr interp_1, "o1.== o2"
67 assert_instance_of VCA::Bool, value
68 assert_equal true, value.val
69
70 value = Api.eval_expr interp_1, "o1.== 4"
71 assert_instance_of VCA::Bool, value
72 assert_equal false, value.val
73
74 value = Api.eval_expr interp_1, <<-EOS
75 o1.== (&Err.make @Banana)
76 EOS
77 assert_instance_of VCA::Bool, value
78 assert_equal false, value.val
79
80 value = Api.eval_expr interp_1, <<-EOS
81 o1.== (&Ok.make @Banana)
82 EOS
83 assert_instance_of VCA::Bool, value
84 assert_equal false, value.val
85 end
86
87
88 def test_imess_less_than
89 interp_1 = Api.eval_decls @interp, <<-EOS
90 val o = &Ok.make @Apple
91 EOS
92
93 value = Api.eval_expr interp_1, "o.< o"
94 assert_instance_of VCA::Bool, value
95 assert_equal false, value.val
96
97 value = Api.eval_expr interp_1, "o.< (&Ok.make @Banana)"
98 assert_instance_of VCA::Bool, value
99 assert_equal true, value.val
100
101 value = Api.eval_expr interp_1, "o.< (&Ok.make @A)"
102 assert_instance_of VCA::Bool, value
103 assert_equal false, value.val
104
105 value = Api.eval_expr interp_1, "o.< (&Err.make @Carrot)"
106 assert_instance_of VCA::Bool, value
107 assert_equal true, value.val
108
109 value = Api.eval_expr interp_1, 'o.< (&Err.make "Carrot")'
110 assert_instance_of VCA::Bool, value
111 assert_equal true, value.val
112 end
113 end
114
115
116
117 class ErrTest < Minitest::Test
118 def setup
119 @interp = Api.setup_interpreter
120 end
121
122
123 def test_cmeth_make
124 value = Api.eval_expr @interp, "&Err.make @Apple"
125 assert_instance_of VCU::Result::Err, value
126 assert_instance_of VCA::Symbol, value.contents
127 assert_equal :Apple, value.contents.val
128 end
129
130
131 def test_imeth_show
132 value = Api.eval_expr @interp, "&Err.make @Apple.show"
133 assert_instance_of VCA::String, value
134 assert_equal '&Err @Apple', value.val
135 end
136
137
138 def test_imeth_to_s
139 value = Api.eval_expr @interp, "&Err.make @Apple.to-s"
140 assert_instance_of VCA::String, value
141 assert_equal '&Err Apple', value.val
142 end
143
144
145 def test_imeth_is_ok
146 value = Api.eval_expr @interp, "&Err.make @Apple.Ok?"
147 assert_instance_of VCA::Bool, value
148 assert_equal false, value.val
149 end
150
151
152 def test_imeth_is_err
153 value = Api.eval_expr @interp, "&Err.make @Apple.Err?"
154 assert_instance_of VCA::Bool, value
155 assert_equal true, value.val
156 end
157
158
159 def test_imess_equal
160 interp_1 = Api.eval_decls @interp, <<-EOS
161 val e1 = &Err.make @Apple
162 val e2 = &Err.make @Apple
163 EOS
164
165 value = Api.eval_expr interp_1, "e1.== e2"
166 assert_instance_of VCA::Bool, value
167 assert_equal true, value.val
168
169 value = Api.eval_expr interp_1, "e1.== 4"
170 assert_instance_of VCA::Bool, value
171 assert_equal false, value.val
172
173 value = Api.eval_expr interp_1, <<-EOS
174 e1.== (&Ok.make @Banana)
175 EOS
176 assert_instance_of VCA::Bool, value
177 assert_equal false, value.val
178
179 value = Api.eval_expr interp_1, <<-EOS
180 e1.== (&Err.make @Banana)
181 EOS
182 assert_instance_of VCA::Bool, value
183 assert_equal false, value.val
184 end
185
186
187 def test_imess_less_than
188 interp_1 = Api.eval_decls @interp, <<-EOS
189 val o = &Err.make @Apple
190 EOS
191
192 value = Api.eval_expr interp_1, "o.< o"
193 assert_instance_of VCA::Bool, value
194 assert_equal false, value.val
195
196 value = Api.eval_expr interp_1, "o.< (&Err.make @Banana)"
197 assert_instance_of VCA::Bool, value
198 assert_equal true, value.val
199
200 value = Api.eval_expr interp_1, "o.< (&Err.make @A)"
201 assert_instance_of VCA::Bool, value
202 assert_equal false, value.val
203
204 value = Api.eval_expr interp_1, "o.< (&Ok.make @Carrot)"
205 assert_instance_of VCA::Bool, value
206 assert_equal false, value.val
207
208 value = Api.eval_expr interp_1, 'o.< (&Ok.make "Carrot")'
209 assert_instance_of VCA::Bool, value
210 assert_equal false, value.val
211 end
212 end
213
214 end # Umu::Test::Library::Class::Union::Result
215
216 end # Umu::Test::Library::Class::Union
217
218 end # Umu::Test::Library::Class
219
220 end # Umu::Test::Library
221
222 end # Umu::Test
223
224 end # Umu