comparison ibin/brachylog/Brachylog-master/src/tests.pl @ 11865:318de151d0ec draft

<b_jonas> python3 -cimport os,zipfile; os.chdir("ibin/brachylog"); zipfile.ZipFile("master.zip").extractall()
author HackEso <hackeso@esolangs.org>
date Tue, 16 Jul 2019 21:37:27 +0000
parents
children
comparison
equal deleted inserted replaced
11864:d054de7f80f2 11865:318de151d0ec
1 /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
2 ____ ____
3 \ \ / /
4 \ \ ____ / /
5 \ \/ \/ /
6 \ /\ / BRACHYLOG
7 \ / \ / A terse declarative logic programming language
8 / \ / \
9 / \/ \ Written by Julien Cumin - 2017
10 / /\____/\ \ https://github.com/JCumin/Brachylog
11 / / ___ \ \
12 /___/ /__/ \___\
13
14 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
15
16
17 :- consult(brachylog).
18
19
20 :- begin_tests(predicates).
21
22
23 /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
24 BRACHYLOG_LESSEQUAL
25 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
26 test('lessequal_1', all(X == [2])) :-
27 run_from_atom('1≤2', _, X).
28 test('lessequal_2', all(X == [2])) :-
29 run_from_atom('_1≤2', _, X).
30 test('lessequal_3', all(X == [0])) :-
31 run_from_atom('0≤0', _, X).
32 test('lessequal_4', all(X == [13])) :-
33 run_from_atom('13≤13', _, X).
34 test('lessequal_5', all(X == [-42])) :-
35 run_from_atom('_42≤_42', _, X).
36 test('lessequal_6', all(X == [[1,2,3]])) :-
37 run_from_atom('[1,2,3]≤₁', _, X).
38 test('lessequal_7', all(X == [[-1,0,1]])) :-
39 run_from_atom('[_1,0,1]≤₁', _, X).
40 test('lessequal_8', all(X == [[-42,-23,-16]])) :-
41 run_from_atom('[_42,_23,_16]≤₁', _, X).
42 test('lessequal_9', all(X == [[1,1,3],[1,2,3],[1,3,3]])) :-
43 run_from_atom('[1,I,3]≤₁', _, X).
44 test('lessequal_10', fail) :-
45 run_from_atom('2≤1', _, _).
46 test('lessequal_11', fail) :-
47 run_from_atom('2≤_1', _, _).
48 test('lessequal_12', fail) :-
49 run_from_atom('[1,3,2]≤₁', _, _).
50 test('lessequal_13', fail) :-
51 run_from_atom('[1,I,_1]≤₁', _, _).
52
53
54 /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
55 BRACHYLOG_GREATEREQUAL
56 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
57 test('greaterequal_1', all(X == [1])) :-
58 run_from_atom('2≥1', _, X).
59 test('greaterequal_2', all(X == [-1])) :-
60 run_from_atom('2≥_1', _, X).
61 test('greaterequal_3', all(X == [0])) :-
62 run_from_atom('0≥0', _, X).
63 test('greaterequal_4', all(X == [13])) :-
64 run_from_atom('13≥13', _, X).
65 test('greaterequal_5', all(X == [-42])) :-
66 run_from_atom('_42≥_42', _, X).
67 test('greaterequal_6', all(X == [[3,2,1]])) :-
68 run_from_atom('[3,2,1]≥₁', _, X).
69 test('greaterequal_7', all(X == [[1,0,-1]])) :-
70 run_from_atom('[1,0,_1]≥₁', _, X).
71 test('greaterequal_8', all(X == [[-16,-23,-42]])) :-
72 run_from_atom('[_16,_23,_42]≥₁', _, X).
73 test('greaterequal_9', all(X == [[3,1,1],[3,2,1],[3,3,1]])) :-
74 run_from_atom('[3,I,1]≥₁', _, X).
75 test('greaterequal_10', fail) :-
76 run_from_atom('1≥2', _, _).
77 test('greaterequal_11', fail) :-
78 run_from_atom('_1≥2', _, _).
79 test('greaterequal_12', fail) :-
80 run_from_atom('[1,3,2]≥₁', _, _).
81 test('greaterequal_13', fail) :-
82 run_from_atom('[_1,I,1]≥₁', _, _).
83
84
85 /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
86 BRACHYLOG_CONTAINS
87 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
88 % Nothing, same code as brachylog_in
89
90
91 /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
92 BRACHYLOG_IN
93 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
94 test('in_1', fail) :-
95 run_from_atom('∋', [], _).
96 test('in_2', fail) :-
97 run_from_atom('∋', "", _).
98 test('in_3', all(X == [0])) :-
99 run_from_atom('∋', 0, X).
100 test('in_4', all(X == [7])) :-
101 run_from_atom('∋', 7, X).
102 test('in_5', all(X == [7])) :-
103 run_from_atom('∋', '_7', X).
104 test('in_6', all(X == [1,0,2,3])) :-
105 run_from_atom('∋', 1023, X).
106 test('in_7', all(X == [1,0,2,3])) :-
107 run_from_atom('∋', [1,0,2,3], X).
108 test('in_8', all(X == [1023,"test"])) :-
109 run_from_atom('∋', [1023,"test"], X).
110 test('in_9', all(X == ["test"])) :-
111 run_from_atom('∋', ["test"], X).
112 test('in_10', all(X == ["t","e","s","t"])) :-
113 run_from_atom('∋', "test", X).
114 test('in_11', all(X == [1])) :-
115 run_from_atom('∋₀', 1023, X).
116 test('in_12', all(X == ["t"])) :-
117 run_from_atom('∋₀', "test", X).
118 test('in_13', all(X == [1023])) :-
119 run_from_atom('∋₀', [1023,"test"], X).
120 test('in_14', all(X == [0])) :-
121 run_from_atom('∋₁', 1023, X).
122 test('in_15', fail) :-
123 run_from_atom('∋₄', 1023, _).
124
125
126 /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
127 BRACHYLOG_SUPERSET
128 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
129 % Nothing, same code as brachylog_subset
130
131
132 /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
133 BRACHYLOG_SUBSET
134 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
135 test('subset_1', all(X == [[]])) :-
136 run_from_atom('⊇', [], X).
137 test('subset_2', all(X == [""])) :-
138 run_from_atom('⊇', "", X).
139 test('subset_3', all(X == [0])) :-
140 run_from_atom('⊇', 0, X).
141 test('subset_4', all(X == [7])) :-
142 run_from_atom('⊇', 7, X).
143 test('subset_5', all(X == [123,12,13,23,1,2,3])) :-
144 run_from_atom('⊇', 123, X).
145 test('subset_6', all(X == [[1,2,3],[1,2],[1,3],[2,3],[1],[2],[3],[]])) :-
146 run_from_atom('⊇', [1,2,3], X).
147 test('subset_7', all(X == ["test","tes","tet","tst","est","te","ts","tt","es","et","st","t","e","s","t",""])) :-
148 run_from_atom('⊇', "test", X).
149 test('subset_8', fail) :-
150 run_from_atom('⊇', [1,2,3], [1,5]).
151
152
153 /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
154 BRACHYLOG_REVERSE
155 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
156 test('reverse_1', all(X == [0])) :-
157 run_from_atom('↔', 0, X).
158 test('reverse_2', all(X == [[]])) :-
159 run_from_atom('↔', [], X).
160 test('reverse_3', all(X == [""])) :-
161 run_from_atom('↔', "", X).
162 test('reverse_4', all(X == [321])) :-
163 run_from_atom('↔', 123, X).
164 test('reverse_5', all(X == [321])) :-
165 run_from_atom('↔', 1230, X).
166 test('reverse_6', all(X == ["tset"])) :-
167 run_from_atom('↔', "test", X).
168 test('reverse_7', all(X == [[0,3,2,1]])) :-
169 run_from_atom('↔', [1,2,3,0], X).
170 test('reverse_8', all(X == [[1,2,3,2,1]])) :-
171 run_from_atom('↔?', '[1,2,3,I,J]', X).
172 test('reverse_9', all(X == [["a","b","c","b","a"]])) :-
173 run_from_atom('↔?', '["a","b","c",I,J]', X).
174
175
176 /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
177 BRACHYLOG_CALL_PREDICATE
178 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
179 % TODO
180
181
182 /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
183 BRACHYLOG_CIRCULAR_PERMUTE_COUNTERCLOCKWISE
184 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
185 test('circular_permute_counterclockwise_1', all(X == [[]])) :-
186 run_from_atom('↺', [], X).
187 test('circular_permute_counterclockwise_2', all(X == [""])) :-
188 run_from_atom('↺', "", X).
189 test('circular_permute_counterclockwise_3', all(X == [0])) :-
190 run_from_atom('↺', 0, X).
191 test('circular_permute_counterclockwise_4', all(X == [231])) :-
192 run_from_atom('↺', 123, X).
193 test('circular_permute_counterclockwise_5', all(X == ["estt"])) :-
194 run_from_atom('↺', "test", X).
195 test('circular_permute_counterclockwise_6', all(X == [[2,"test",1]])) :-
196 run_from_atom('↺', [1,2,"test"], X).
197 test('circular_permute_counterclockwise_7', all(X == [[4,5,6,1,2,3]])) :-
198 run_from_atom('↺₃', [1,2,3,4,5,6], X).
199
200
201 /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
202 BRACHYLOG_CIRCULAR_PERMUTE_CLOCKWISE
203 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
204 test('circular_permute_clockwise_1', all(X == [[]])) :-
205 run_from_atom('↻', [], X).
206 test('circular_permute_clockwise_2', all(X == [""])) :-
207 run_from_atom('↻', "", X).
208 test('circular_permute_clockwise_3', all(X == [0])) :-
209 run_from_atom('↻', 0, X).
210 test('circular_permute_clockwise_4', all(X == [312])) :-
211 run_from_atom('↻', 123, X).
212 test('circular_permute_clockwise_5', all(X == ["ttes"])) :-
213 run_from_atom('↻', "test", X).
214 test('circular_permute_clockwise_6', all(X == [["test",1,2]])) :-
215 run_from_atom('↻', [1,2,"test"], X).
216 test('circular_permute_clockwise_7', all(X == [[4,5,6,1,2,3]])) :-
217 run_from_atom('↻₃', [1,2,3,4,5,6], X).
218
219
220 /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
221 BRACHYLOG_ROOT
222 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
223 test('root_1', all(X == [-1,1])) :-
224 run_from_atom('√', 1, X).
225 test('root_2', all(X == [0])) :-
226 run_from_atom('√', 0, X).
227 test('root_3', all(X == [-12,12])) :-
228 run_from_atom('√', 144, X).
229 test('root_4', all(X == [2.23606797749979])) :-
230 run_from_atom('√', 5, X).
231 test('root_5', throws(_)) :-
232 run_from_atom('√', '_5', _).
233 test('root_6', all(X == [2.04939015319192])) :-
234 run_from_atom('√', 4.2, X).
235 test('root_7', all(X == [3])) :-
236 run_from_atom('√₃', 27, X).
237 test('root_8', all(X == [-3])) :-
238 run_from_atom('√₃', '_27', X).
239
240
241 /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
242 BRACHYLOG_CEIL
243 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
244 test('ceil_1', fail) :-
245 run_from_atom('⌉', [], _).
246 test('ceil_2', all(X == [3])) :-
247 run_from_atom('⌉', [1,2,3], X).
248 test('ceil_3', all(X == [-5])) :-
249 run_from_atom('⌉', '[_9,_5,_13]', X).
250 test('ceil_4', all(X == ["test"])) :-
251 run_from_atom('⌉', ["test",2,3], X).
252 test('ceil_5', all(X == ["z"])) :-
253 run_from_atom('⌉', ["test","z"], X).
254 test('ceil_6', all(X == [123])) :-
255 run_from_atom('⌉₁', 123, X).
256 test('ceil_7', all(X == [124])) :-
257 run_from_atom('⌉₁', 123.45, X).
258 test('ceil_8', all(X == [-123])) :-
259 run_from_atom('⌉₁', '_123.45', X).
260
261
262 /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
263 BRACHYLOG_FLOOR
264 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
265 test('floor_1', fail) :-
266 run_from_atom('⌋', [], _).
267 test('floor_2', all(X == [1])) :-
268 run_from_atom('⌋', [1,2,3], X).
269 test('floor_3', all(X == [-13])) :-
270 run_from_atom('⌋', '[_9,_5,_13]', X).
271 test('floor_4', all(X == [2])) :-
272 run_from_atom('⌋', ["test",2,3], X).
273 test('floor_5', all(X == ["test"])) :-
274 run_from_atom('⌋', ["test","z"], X).
275 test('floor_6', all(X == [123])) :-
276 run_from_atom('⌋₁', 123, X).
277 test('floor_7', all(X == [123])) :-
278 run_from_atom('⌋₁', 123.45, X).
279 test('floor_8', all(X == [-124])) :-
280 run_from_atom('⌋₁', '_123.45', X).
281
282
283 /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
284 BRACHYLOG_RANGE_ASCENDING
285 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
286 test('range_ascending_1', all(X == [[0]])) :-
287 run_from_atom('⟦', 0, X).
288 test('range_ascending_2', all(X == [[0,1,2,3,4,5]])) :-
289 run_from_atom('⟦', 5, X).
290 test('range_ascending_3', all(X == [[-5,-4,-3,-2,-1,0]])) :-
291 run_from_atom('⟦', '_5', X).
292 test('range_ascending_4', all(X == [[1,2,3,4,5]])) :-
293 run_from_atom('⟦₁', 5, X).
294 test('range_ascending_5', all(X == [[9,10,11,12,13]])) :-
295 run_from_atom('⟦₂', [9,13], X).
296
297
298 /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
299 BRACHYLOG_RANGE_DESCENDING
300 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
301 test('range_descending_1', all(X == [[0]])) :-
302 run_from_atom('⟧', 0, X).
303 test('range_descending_2', all(X == [[5,4,3,2,1,0]])) :-
304 run_from_atom('⟧', 5, X).
305 test('range_descending_3', all(X == [[0,-1,-2,-3,-4,-5]])) :-
306 run_from_atom('⟧', '_5', X).
307 test('range_descending_4', all(X == [[5,4,3,2,1]])) :-
308 run_from_atom('⟧₁', 5, X).
309 test('range_descending_5', all(X == [[13,12,11,10,9]])) :-
310 run_from_atom('⟧₂', [9,13], X).
311
312
313 /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
314 BRACHYLOG_NATURAL_INTEGER
315 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
316 test('natural_integer_1', all(X == [0])) :-
317 run_from_atom('ℕ', 0, X).
318 test('natural_integer_2', all(X == [42])) :-
319 run_from_atom('ℕ', 42, X).
320 test('natural_integer_3', fail) :-
321 run_from_atom('ℕ', "test", _).
322 test('natural_integer_4', fail) :-
323 run_from_atom('ℕ', '_3', _).
324 test('natural_integer_5', fail) :-
325 run_from_atom('ℕ', [1,2], _).
326 test('natural_integer_6', fail) :-
327 run_from_atom('ℕ', 4.2, _).
328 test('natural_integer_7', all(X == [42])) :-
329 run_from_atom('ℕ₄₂', 42, X).
330 test('natural_integer_8', fail) :-
331 run_from_atom('ℕ₄₂', 41, _).
332
333
334 /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
335 BRACHYLOG_INTEGER
336 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
337 test('integer_1', all(X == [0])) :-
338 run_from_atom('ℤ', 0, X).
339 test('integer_2', all(X == [42])) :-
340 run_from_atom('ℤ', 42, X).
341 test('integer_3', fail) :-
342 run_from_atom('ℤ', "test", _).
343 test('integer_4', all(X == [-3])) :-
344 run_from_atom('ℤ', '_3', X).
345 test('integer_5', fail) :-
346 run_from_atom('ℤ', [1,2], _).
347 test('integer_6', fail) :-
348 run_from_atom('ℤ', 4.2, _).
349 test('integer_7', all(X == [-42])) :-
350 run_from_atom('ℤ₄₂', '_42', X).
351 test('integer_8', fail) :-
352 run_from_atom('ℤ₄₂', '_41', _).
353
354
355 /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
356 BRACHYLOG_FLOAT
357 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
358 test('float_1', all(X == [4.2])) :-
359 run_from_atom('ℝ', 4.2, X).
360 test('float_2', all(X == [0.0])) :-
361 run_from_atom('ℝ', 0.0, X).
362 test('float_3', all(X == [-4.2])) :-
363 run_from_atom('ℝ', '_4.2', X).
364 test('float_4', fail) :-
365 run_from_atom('ℝ', 0, _).
366 test('float_5', fail) :-
367 run_from_atom('ℝ', 42, _).
368 test('float_6', all(X == [42])) :-
369 run_from_atom('ℝ₁', 42, X).
370
371
372 /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
373 BRACHYLOG_EMPTY
374 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
375 test('empty_1', nondet) :-
376 run_from_atom('∅', [], _).
377 test('empty_2', nondet) :-
378 run_from_atom('∅', 0, _).
379 test('empty_3', nondet) :-
380 run_from_atom('∅', "", _).
381 test('empty_4', nondet) :-
382 run_from_atom('∅', 0.0, _).
383 test('empty_5', fail) :-
384 run_from_atom('∅', [1], _).
385 test('empty_6', fail) :-
386 run_from_atom('∅', 1, _).
387 test('empty_7', fail) :-
388 run_from_atom('∅', "a", _).
389
390
391 /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
392 BRACHYLOG_DIFFERENT
393 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
394 test('different_1', all(X == [12345])) :-
395 run_from_atom('≠', 12345, X).
396 test('different_1', fail) :-
397 run_from_atom('≠', 12344, _).
398 test('different_1', all(X == [[1,2,3]])) :-
399 run_from_atom('≠', [1,2,3], X).
400 test('different_1', fail) :-
401 run_from_atom('≠', [1,2,1], _).
402
403
404 /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
405 BRACHYLOG_INTEGER_DIVISION
406 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
407 test('integer_division_1', all(X == [3])) :-
408 run_from_atom('÷', [6,2], X).
409 test('integer_division_2', all(X == [3])) :-
410 run_from_atom('÷', [7,2], X).
411 test('integer_division_3', all(X == [-3])) :-
412 run_from_atom('÷', '[_6,2]', X).
413 test('integer_division_1', fail) :-
414 run_from_atom('÷', '[6,0]', _).
415 test('integer_division_1', all(X == [0])) :-
416 run_from_atom('÷', '[0,_42]', X).
417 test('integer_division_1', all(X == [3])) :-
418 run_from_atom('÷', [6.2,2], X).
419 test('integer_division_1', all(X == [2])) :-
420 run_from_atom('÷₃', 6, X).
421
422
423 /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
424 BRACHYLOG_MULTIPLY
425 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
426 test('multiply_1', all(X == [1])) :-
427 run_from_atom('×', [], X).
428 test('multiply_2', all(X == [12])) :-
429 run_from_atom('×', [6,2], X).
430 test('multiply_3', all(X == [12])) :-
431 run_from_atom('×', [2,6], X).
432 test('multiply_4', all(X == [-12])) :-
433 run_from_atom('×', '[_6,2]', X).
434 test('multiply_5', all(X == [24])) :-
435 run_from_atom('×', [2,3,4], X).
436 test('multiply_6', all(X == [0])) :-
437 run_from_atom('×', '[0,_42]', X).
438 test('multiply_7', all(X == [12.4])) :-
439 run_from_atom('×', [6.2,2], X).
440 test('multiply_8', all(X == [18])) :-
441 run_from_atom('×₃', 6, X).
442
443
444 /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
445 BRACHYLOG_MODULO
446 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
447 test('modulo_1', all(X == [1])) :-
448 run_from_atom('%', [4,3], X).
449 test('modulo_2', all(X == [0])) :-
450 run_from_atom('%', [4,2], X).
451 test('modulo_3', all(X == [4])) :-
452 run_from_atom('%', [42,19], X).
453
454
455 /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
456 BRACHYLOG_EXP
457 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
458 test('exp_1', all(X == [22026.465794806718])) :-
459 run_from_atom('*', 10, X).
460 test('exp_2', all(X == [2.302585092994046])) :-
461 run_from_atom('*₁', 10, X).
462 test('exp_3', all(X == [-0.8390715290764524])) :-
463 run_from_atom('*₂', 10, X).
464 test('exp_4', all(X == [-0.5440211108893698])) :-
465 run_from_atom('*₃', 10, X).
466 test('exp_5', all(X == [0.6483608274590866])) :-
467 run_from_atom('*₄', 10, X).
468 test('exp_6', all(X == [1.0471975511965979])) :-
469 run_from_atom('*₅', 0.5, X).
470 test('exp_7', all(X == [0.5235987755982989])) :-
471 run_from_atom('*₆', 0.5, X).
472 test('exp_8', all(X == [1.4711276743037347])) :-
473 run_from_atom('*₇', 10, X).
474 test('exp_9', all(X == [11013.232920103323])) :-
475 run_from_atom('*₈', 10, X).
476 test('exp_10', all(X == [11013.232874703393])) :-
477 run_from_atom('*₉', 10, X).
478 test('exp_11', all(X == [0.9999999958776927])) :-
479 run_from_atom('*₁₀', 10, X).
480 test('exp_12', all(X == [2.993222846126381])) :-
481 run_from_atom('*₁₁', 10, X).
482 test('exp_13', all(X == [2.99822295029797])) :-
483 run_from_atom('*₁₂', 10, X).
484 test('exp_14', all(X == [0.5493061443340549])) :-
485 run_from_atom('*₁₃', 0.5, X).
486
487
488 /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
489 BRACHYLOG_PLUS
490 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
491 test('plus_1', all(X == [3])) :-
492 run_from_atom('+', [1,2], X).
493 test('plus_2', all(X == [2])) :-
494 run_from_atom('+', '[_3,5]', X).
495 test('plus_3', all(X == [-5])) :-
496 run_from_atom('+', '[_3,_2]', X).
497 test('plus_4', all(X == [21])) :-
498 run_from_atom('+', [1,2,3,4,5,6], X).
499 test('plus_5', all(X == [4.6])) :-
500 run_from_atom('+', [1.2,3.4], X).
501 test('plus_6', all(X == [13])) :-
502 run_from_atom('+', [13,0,0,0,0], X).
503 test('plus_7', all(X == [67])) :-
504 run_from_atom('+₄₂', 25, X).
505
506
507 /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
508 BRACHYLOG_MINUS
509 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
510 test('minus_1', all(X == [-1])) :-
511 run_from_atom('-', [1,2], X).
512 test('minus_2', all(X == [-8])) :-
513 run_from_atom('-', '[_3,5]', X).
514 test('minus_3', all(X == [2])) :-
515 run_from_atom('-', '[_1,_3]', X).
516 test('minus_4', all(X == [-3])) :-
517 run_from_atom('-', [1,2,3,4,5,6], X).
518 test('minus_5', all(X == [-2.2])) :-
519 run_from_atom('-', [1.2,3.4], X).
520 test('minus_6', all(X == [13])) :-
521 run_from_atom('-', [13,0,0,0,0], X).
522 test('minus_7', all(X == [-17])) :-
523 run_from_atom('-₄₂', 25, X).
524
525
526 /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
527 BRACHYLOG_DIVIDE
528 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
529 test('divide_1', all(X == [0.5])) :-
530 run_from_atom('/', [1,2], X).
531 test('divide_2', all(X == [3])) :-
532 run_from_atom('/', [6,2], X).
533 test('divide_3', all(X == [-0.5])) :-
534 run_from_atom('/', '[1,_2]', X).
535 test('divide_4', all(X == [0.1111111111111111])) :-
536 run_from_atom('/₁', 9, X).
537
538
539 /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
540 BRACHYLOG_LESS
541 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
542 test('less_1', all(X == [2])) :-
543 run_from_atom('1<2', _, X).
544 test('less_2', all(X == [2])) :-
545 run_from_atom('_1<2', _, X).
546 test('less_3', fail) :-
547 run_from_atom('0<0', _, _).
548 test('less_4', fail) :-
549 run_from_atom('13<13', _, _).
550 test('less_5', fail) :-
551 run_from_atom('_42<_42', _, _).
552 test('less_6', all(X == [[1,2,3]])) :-
553 run_from_atom('[1,2,3]<₁', _, X).
554 test('less_7', all(X == [[-1,0,1]])) :-
555 run_from_atom('[_1,0,1]<₁', _, X).
556 test('less_8', all(X == [[-42,-23,-16]])) :-
557 run_from_atom('[_42,_23,_16]<₁', _, X).
558 test('less_9', all(X == [[1,2,3]])) :-
559 run_from_atom('[1,I,3]<₁', _, X).
560 test('less_10', fail) :-
561 run_from_atom('2<1', _, _).
562 test('less_11', fail) :-
563 run_from_atom('2<_1', _, _).
564 test('less_12', fail) :-
565 run_from_atom('[1,3,2]<₁', _, _).
566 test('less_13', fail) :-
567 run_from_atom('[1,I,_1]<₁', _, _).
568
569
570 /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
571 BRACHYLOG_EQUAL
572 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
573 test('equal_1', all(X == [1111])) :-
574 run_from_atom('=', 1111, X).
575 test('equal_2', all(X == [[]])) :-
576 run_from_atom('=', [], X).
577 test('equal_3', all(X == [0])) :-
578 run_from_atom('=', 0, X).
579 test('equal_4', all(X == [[42,42,42,42]])) :-
580 run_from_atom('=', '[X,Y,42,Z]', X).
581 test('equal_5', fail) :-
582 run_from_atom('=', [1,1,1,2,1], _).
583
584
585 /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
586 BRACHYLOG_GREATER
587 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
588 test('greater_1', all(X == [1])) :-
589 run_from_atom('2>1', _, X).
590 test('greater_2', all(X == [-1])) :-
591 run_from_atom('2>_1', _, X).
592 test('greater_3', fail) :-
593 run_from_atom('0>0', _, _).
594 test('greater_4', fail) :-
595 run_from_atom('13>13', _, _).
596 test('greater_5', fail) :-
597 run_from_atom('_42>_42', _, _).
598 test('greater_6', all(X == [[3,2,1]])) :-
599 run_from_atom('[3,2,1]>₁', _, X).
600 test('greater_7', all(X == [[1,0,-1]])) :-
601 run_from_atom('[1,0,_1]>₁', _, X).
602 test('greater_8', all(X == [[-16,-23,-42]])) :-
603 run_from_atom('[_16,_23,_42]>₁', _, X).
604 test('greater_9', all(X == [[3,2,1]])) :-
605 run_from_atom('[3,I,1]>₁', _, X).
606 test('greater_10', fail) :-
607 run_from_atom('1>2', _, _).
608 test('greater_11', fail) :-
609 run_from_atom('_1>2', _, _).
610 test('greater_12', fail) :-
611 run_from_atom('[1,3,2]>₁', _, _).
612 test('greater_13', fail) :-
613 run_from_atom('[_1,I,1]>₁', _, _).
614
615
616 /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
617 BRACHYLOG_TRANSPOSE
618 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
619 test('transpose_1', all(X == [[[1,4,7],[2,5,8],[3,6,9]]])) :-
620 run_from_atom('\\', [[1,2,3],[4,5,6],[7,8,9]], X).
621
622
623 /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
624 BRACHYLOG_POWER
625 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
626 test('power_1', all(X == [8])) :-
627 run_from_atom('^', [2,3], X).
628 test('power_2', all(X == [-8])) :-
629 run_from_atom('^', '[_2,3]', X).
630 test('power_3', all(X == [1])) :-
631 run_from_atom('^', [1,50], X).
632 test('power_4', all(X == [0])) :-
633 run_from_atom('^', [0,42], X).
634 test('power_5', all(X == [1])) :-
635 run_from_atom('^', [7,0], X).
636 test('power_6', all(X == [49])) :-
637 run_from_atom('^₂', 7, X).
638
639
640 :- end_tests(predicates).
641
642
643 % Useful templates
644 test('_', all(X == [])) :-
645 run_from_atom('', _, X).
646
647 test('_', fail) :-
648 run_from_atom('', _, _).