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 Atom
15
16 class BoolTest < Minitest::Test
17 def setup
18 @interp = Api.setup_interpreter
19 end
20
21
22 def test_cmess_make_true
23 value = Api.eval_expr @interp, "&Bool.true"
24 assert_instance_of VCA::Bool, value
25 assert_equal true, value.val
26 end
27
28
29 def test_cmess_make_false
30 value = Api.eval_expr @interp, "&Bool.false"
31 assert_instance_of VCA::Bool, value
32 assert_equal false, value.val
33 end
34
35
36 def test_imess_show
37 value = Api.eval_expr @interp, "TRUE.show"
38 assert_instance_of VCA::String, value
39 assert_equal "TRUE", value.val
40
41 value = Api.eval_expr @interp, "FALSE.show"
42 assert_instance_of VCA::String, value
43 assert_equal "FALSE", value.val
44 end
45
46
47 def test_imess_to_s
48 value = Api.eval_expr @interp, "TRUE.to-s"
49 assert_instance_of VCA::String, value
50 assert_equal "TRUE", value.val
51
52 value = Api.eval_expr @interp, "FALSE.to-s"
53 assert_instance_of VCA::String, value
54 assert_equal "FALSE", value.val
55 end
56
57
58 def test_imess_equal
59 value = Api.eval_expr @interp, "TRUE.== TRUE"
60 assert_instance_of VCA::Bool, value
61 assert_equal true, value.val
62
63 value = Api.eval_expr @interp, "FALSE.== FALSE"
64 assert_instance_of VCA::Bool, value
65 assert_equal true, value.val
66
67 value = Api.eval_expr @interp, "TRUE.== FALSE"
68 assert_instance_of VCA::Bool, value
69 assert_equal false, value.val
70
71 value = Api.eval_expr @interp, "FALSE.== TRUE"
72 assert_instance_of VCA::Bool, value
73 assert_equal false, value.val
74 end
75
76
77 def test_imess_not_equal
78 value = Api.eval_expr @interp, "TRUE.<> TRUE"
79 assert_instance_of VCA::Bool, value
80 assert_equal false, value.val
81
82 value = Api.eval_expr @interp, "FALSE.<> FALSE"
83 assert_instance_of VCA::Bool, value
84 assert_equal false, value.val
85
86 value = Api.eval_expr @interp, "TRUE.<> FALSE"
87 assert_instance_of VCA::Bool, value
88 assert_equal true, value.val
89
90 value = Api.eval_expr @interp, "FALSE.<> TRUE"
91 assert_instance_of VCA::Bool, value
92 assert_equal true, value.val
93 end
94
95
96 def test_imess_less_than
97 value = Api.eval_expr @interp, "TRUE.< TRUE"
98 assert_instance_of VCA::Bool, value
99 assert_equal false, value.val
100
101 value = Api.eval_expr @interp, "FALSE.< FALSE"
102 assert_instance_of VCA::Bool, value
103 assert_equal false, value.val
104
105 value = Api.eval_expr @interp, "TRUE.< FALSE"
106 assert_instance_of VCA::Bool, value
107 assert_equal true, value.val
108
109 value = Api.eval_expr @interp, "FALSE.< TRUE"
110 assert_instance_of VCA::Bool, value
111 assert_equal false, value.val
112 end
113
114
115 def test_imess_less_equal
116 value = Api.eval_expr @interp, "TRUE.<= TRUE"
117 assert_instance_of VCA::Bool, value
118 assert_equal true, value.val
119
120 value = Api.eval_expr @interp, "FALSE.<= FALSE"
121 assert_instance_of VCA::Bool, value
122 assert_equal true, value.val
123
124 value = Api.eval_expr @interp, "TRUE.<= FALSE"
125 assert_instance_of VCA::Bool, value
126 assert_equal true, value.val
127
128 value = Api.eval_expr @interp, "FALSE.<= TRUE"
129 assert_instance_of VCA::Bool, value
130 assert_equal false, value.val
131 end
132
133
134 def test_imess_greater_than
135 value = Api.eval_expr @interp, "TRUE.> TRUE"
136 assert_instance_of VCA::Bool, value
137 assert_equal false, value.val
138
139 value = Api.eval_expr @interp, "FALSE.> FALSE"
140 assert_instance_of VCA::Bool, value
141 assert_equal false, value.val
142
143 value = Api.eval_expr @interp, "TRUE.> FALSE"
144 assert_instance_of VCA::Bool, value
145 assert_equal false, value.val
146
147 value = Api.eval_expr @interp, "FALSE.> TRUE"
148 assert_instance_of VCA::Bool, value
149 assert_equal true, value.val
150 end
151
152
153 def test_imess_greater_equal
154 value = Api.eval_expr @interp, "TRUE.>= TRUE"
155 assert_instance_of VCA::Bool, value
156 assert_equal true, value.val
157
158 value = Api.eval_expr @interp, "FALSE.>= FALSE"
159 assert_instance_of VCA::Bool, value
160 assert_equal true, value.val
161
162 value = Api.eval_expr @interp, "TRUE.>= FALSE"
163 assert_instance_of VCA::Bool, value
164 assert_equal false, value.val
165
166 value = Api.eval_expr @interp, "FALSE.>= TRUE"
167 assert_instance_of VCA::Bool, value
168 assert_equal true, value.val
169 end
170
171
172 def test_imess_compare
173 value = Api.eval_expr @interp, "TRUE.<=> TRUE"
174 assert_instance_of VCAN::Int, value
175 assert_equal 0, value.val
176
177 value = Api.eval_expr @interp, "FALSE.<=> FALSE"
178 assert_instance_of VCAN::Int, value
179 assert_equal 0, value.val
180
181 value = Api.eval_expr @interp, "TRUE.<=> FALSE"
182 assert_instance_of VCAN::Int, value
183 assert_equal (-1), value.val
184
185 value = Api.eval_expr @interp, "FALSE.<=> TRUE"
186 assert_instance_of VCAN::Int, value
187 assert_equal 1, value.val
188 end
189
190
191 def test_imess_not
192 value = Api.eval_expr @interp, "TRUE.not"
193 assert_instance_of VCA::Bool, value
194 assert_equal false, value.val
195
196 value = Api.eval_expr @interp, "FALSE.not"
197 assert_instance_of VCA::Bool, value
198 assert_equal true, value.val
199 end
200
201
202 # Type Error
203
204 def test_parameter_of_relation_operator_should_be_a_bool
205 assert_raises(X::TypeError) do
206 Api.eval_expr @interp, "TRUE.< ()"
207 end
208
209 assert_raises(X::TypeError) do
210 Api.eval_expr @interp, "TRUE.< @Apple"
211 end
212
213 assert_raises(X::TypeError) do
214 Api.eval_expr @interp, "TRUE.< 4"
215 end
216
217 assert_raises(X::TypeError) do
218 Api.eval_expr @interp, "TRUE.<= ()"
219 end
220
221 assert_raises(X::TypeError) do
222 Api.eval_expr @interp, "TRUE.<= @Apple"
223 end
224
225 assert_raises(X::TypeError) do
226 Api.eval_expr @interp, "TRUE.<= 4"
227 end
228 end
229 end
230
231 end # Umu::Test::Library::Class::Atom
232
233 end # Umu::Test::Library::Class
234
235 end # Umu::Test::Library
236
237 end # Umu::Test
238
239 end # Umu