Mercurial > repo
diff interps/brachylog/brachylog/Brachylog-master/src/tests.pl @ 11868:70dedbc831e9 draft
<ais523> ` mv ibin/brachylog interps/brachylog
author | HackEso <hackeso@esolangs.org> |
---|---|
date | Tue, 16 Jul 2019 21:39:11 +0000 |
parents | ibin/brachylog/Brachylog-master/src/tests.pl@318de151d0ec |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/interps/brachylog/brachylog/Brachylog-master/src/tests.pl Tue Jul 16 21:39:11 2019 +0000 @@ -0,0 +1,648 @@ +/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +____ ____ +\ \ / / + \ \ ____ / / + \ \/ \/ / + \ /\ / BRACHYLOG + \ / \ / A terse declarative logic programming language + / \ / \ + / \/ \ Written by Julien Cumin - 2017 + / /\____/\ \ https://github.com/JCumin/Brachylog + / / ___ \ \ +/___/ /__/ \___\ + +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ + + +:- consult(brachylog). + + +:- begin_tests(predicates). + + +/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + BRACHYLOG_LESSEQUAL +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ +test('lessequal_1', all(X == [2])) :- + run_from_atom('1≤2', _, X). +test('lessequal_2', all(X == [2])) :- + run_from_atom('_1≤2', _, X). +test('lessequal_3', all(X == [0])) :- + run_from_atom('0≤0', _, X). +test('lessequal_4', all(X == [13])) :- + run_from_atom('13≤13', _, X). +test('lessequal_5', all(X == [-42])) :- + run_from_atom('_42≤_42', _, X). +test('lessequal_6', all(X == [[1,2,3]])) :- + run_from_atom('[1,2,3]≤₁', _, X). +test('lessequal_7', all(X == [[-1,0,1]])) :- + run_from_atom('[_1,0,1]≤₁', _, X). +test('lessequal_8', all(X == [[-42,-23,-16]])) :- + run_from_atom('[_42,_23,_16]≤₁', _, X). +test('lessequal_9', all(X == [[1,1,3],[1,2,3],[1,3,3]])) :- + run_from_atom('[1,I,3]≤₁', _, X). +test('lessequal_10', fail) :- + run_from_atom('2≤1', _, _). +test('lessequal_11', fail) :- + run_from_atom('2≤_1', _, _). +test('lessequal_12', fail) :- + run_from_atom('[1,3,2]≤₁', _, _). +test('lessequal_13', fail) :- + run_from_atom('[1,I,_1]≤₁', _, _). + + +/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + BRACHYLOG_GREATEREQUAL +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ +test('greaterequal_1', all(X == [1])) :- + run_from_atom('2≥1', _, X). +test('greaterequal_2', all(X == [-1])) :- + run_from_atom('2≥_1', _, X). +test('greaterequal_3', all(X == [0])) :- + run_from_atom('0≥0', _, X). +test('greaterequal_4', all(X == [13])) :- + run_from_atom('13≥13', _, X). +test('greaterequal_5', all(X == [-42])) :- + run_from_atom('_42≥_42', _, X). +test('greaterequal_6', all(X == [[3,2,1]])) :- + run_from_atom('[3,2,1]≥₁', _, X). +test('greaterequal_7', all(X == [[1,0,-1]])) :- + run_from_atom('[1,0,_1]≥₁', _, X). +test('greaterequal_8', all(X == [[-16,-23,-42]])) :- + run_from_atom('[_16,_23,_42]≥₁', _, X). +test('greaterequal_9', all(X == [[3,1,1],[3,2,1],[3,3,1]])) :- + run_from_atom('[3,I,1]≥₁', _, X). +test('greaterequal_10', fail) :- + run_from_atom('1≥2', _, _). +test('greaterequal_11', fail) :- + run_from_atom('_1≥2', _, _). +test('greaterequal_12', fail) :- + run_from_atom('[1,3,2]≥₁', _, _). +test('greaterequal_13', fail) :- + run_from_atom('[_1,I,1]≥₁', _, _). + + +/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + BRACHYLOG_CONTAINS +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ +% Nothing, same code as brachylog_in + + +/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + BRACHYLOG_IN +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ +test('in_1', fail) :- + run_from_atom('∋', [], _). +test('in_2', fail) :- + run_from_atom('∋', "", _). +test('in_3', all(X == [0])) :- + run_from_atom('∋', 0, X). +test('in_4', all(X == [7])) :- + run_from_atom('∋', 7, X). +test('in_5', all(X == [7])) :- + run_from_atom('∋', '_7', X). +test('in_6', all(X == [1,0,2,3])) :- + run_from_atom('∋', 1023, X). +test('in_7', all(X == [1,0,2,3])) :- + run_from_atom('∋', [1,0,2,3], X). +test('in_8', all(X == [1023,"test"])) :- + run_from_atom('∋', [1023,"test"], X). +test('in_9', all(X == ["test"])) :- + run_from_atom('∋', ["test"], X). +test('in_10', all(X == ["t","e","s","t"])) :- + run_from_atom('∋', "test", X). +test('in_11', all(X == [1])) :- + run_from_atom('∋₀', 1023, X). +test('in_12', all(X == ["t"])) :- + run_from_atom('∋₀', "test", X). +test('in_13', all(X == [1023])) :- + run_from_atom('∋₀', [1023,"test"], X). +test('in_14', all(X == [0])) :- + run_from_atom('∋₁', 1023, X). +test('in_15', fail) :- + run_from_atom('∋₄', 1023, _). + + +/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + BRACHYLOG_SUPERSET +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ +% Nothing, same code as brachylog_subset + + +/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + BRACHYLOG_SUBSET +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ +test('subset_1', all(X == [[]])) :- + run_from_atom('⊇', [], X). +test('subset_2', all(X == [""])) :- + run_from_atom('⊇', "", X). +test('subset_3', all(X == [0])) :- + run_from_atom('⊇', 0, X). +test('subset_4', all(X == [7])) :- + run_from_atom('⊇', 7, X). +test('subset_5', all(X == [123,12,13,23,1,2,3])) :- + run_from_atom('⊇', 123, X). +test('subset_6', all(X == [[1,2,3],[1,2],[1,3],[2,3],[1],[2],[3],[]])) :- + run_from_atom('⊇', [1,2,3], X). +test('subset_7', all(X == ["test","tes","tet","tst","est","te","ts","tt","es","et","st","t","e","s","t",""])) :- + run_from_atom('⊇', "test", X). +test('subset_8', fail) :- + run_from_atom('⊇', [1,2,3], [1,5]). + + +/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + BRACHYLOG_REVERSE +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ +test('reverse_1', all(X == [0])) :- + run_from_atom('↔', 0, X). +test('reverse_2', all(X == [[]])) :- + run_from_atom('↔', [], X). +test('reverse_3', all(X == [""])) :- + run_from_atom('↔', "", X). +test('reverse_4', all(X == [321])) :- + run_from_atom('↔', 123, X). +test('reverse_5', all(X == [321])) :- + run_from_atom('↔', 1230, X). +test('reverse_6', all(X == ["tset"])) :- + run_from_atom('↔', "test", X). +test('reverse_7', all(X == [[0,3,2,1]])) :- + run_from_atom('↔', [1,2,3,0], X). +test('reverse_8', all(X == [[1,2,3,2,1]])) :- + run_from_atom('↔?', '[1,2,3,I,J]', X). +test('reverse_9', all(X == [["a","b","c","b","a"]])) :- + run_from_atom('↔?', '["a","b","c",I,J]', X). + + +/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + BRACHYLOG_CALL_PREDICATE +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ +% TODO + + +/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + BRACHYLOG_CIRCULAR_PERMUTE_COUNTERCLOCKWISE +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ +test('circular_permute_counterclockwise_1', all(X == [[]])) :- + run_from_atom('↺', [], X). +test('circular_permute_counterclockwise_2', all(X == [""])) :- + run_from_atom('↺', "", X). +test('circular_permute_counterclockwise_3', all(X == [0])) :- + run_from_atom('↺', 0, X). +test('circular_permute_counterclockwise_4', all(X == [231])) :- + run_from_atom('↺', 123, X). +test('circular_permute_counterclockwise_5', all(X == ["estt"])) :- + run_from_atom('↺', "test", X). +test('circular_permute_counterclockwise_6', all(X == [[2,"test",1]])) :- + run_from_atom('↺', [1,2,"test"], X). +test('circular_permute_counterclockwise_7', all(X == [[4,5,6,1,2,3]])) :- + run_from_atom('↺₃', [1,2,3,4,5,6], X). + + +/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + BRACHYLOG_CIRCULAR_PERMUTE_CLOCKWISE +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ +test('circular_permute_clockwise_1', all(X == [[]])) :- + run_from_atom('↻', [], X). +test('circular_permute_clockwise_2', all(X == [""])) :- + run_from_atom('↻', "", X). +test('circular_permute_clockwise_3', all(X == [0])) :- + run_from_atom('↻', 0, X). +test('circular_permute_clockwise_4', all(X == [312])) :- + run_from_atom('↻', 123, X). +test('circular_permute_clockwise_5', all(X == ["ttes"])) :- + run_from_atom('↻', "test", X). +test('circular_permute_clockwise_6', all(X == [["test",1,2]])) :- + run_from_atom('↻', [1,2,"test"], X). +test('circular_permute_clockwise_7', all(X == [[4,5,6,1,2,3]])) :- + run_from_atom('↻₃', [1,2,3,4,5,6], X). + + +/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + BRACHYLOG_ROOT +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ +test('root_1', all(X == [-1,1])) :- + run_from_atom('√', 1, X). +test('root_2', all(X == [0])) :- + run_from_atom('√', 0, X). +test('root_3', all(X == [-12,12])) :- + run_from_atom('√', 144, X). +test('root_4', all(X == [2.23606797749979])) :- + run_from_atom('√', 5, X). +test('root_5', throws(_)) :- + run_from_atom('√', '_5', _). +test('root_6', all(X == [2.04939015319192])) :- + run_from_atom('√', 4.2, X). +test('root_7', all(X == [3])) :- + run_from_atom('√₃', 27, X). +test('root_8', all(X == [-3])) :- + run_from_atom('√₃', '_27', X). + + +/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + BRACHYLOG_CEIL +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ +test('ceil_1', fail) :- + run_from_atom('⌉', [], _). +test('ceil_2', all(X == [3])) :- + run_from_atom('⌉', [1,2,3], X). +test('ceil_3', all(X == [-5])) :- + run_from_atom('⌉', '[_9,_5,_13]', X). +test('ceil_4', all(X == ["test"])) :- + run_from_atom('⌉', ["test",2,3], X). +test('ceil_5', all(X == ["z"])) :- + run_from_atom('⌉', ["test","z"], X). +test('ceil_6', all(X == [123])) :- + run_from_atom('⌉₁', 123, X). +test('ceil_7', all(X == [124])) :- + run_from_atom('⌉₁', 123.45, X). +test('ceil_8', all(X == [-123])) :- + run_from_atom('⌉₁', '_123.45', X). + + +/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + BRACHYLOG_FLOOR +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ +test('floor_1', fail) :- + run_from_atom('⌋', [], _). +test('floor_2', all(X == [1])) :- + run_from_atom('⌋', [1,2,3], X). +test('floor_3', all(X == [-13])) :- + run_from_atom('⌋', '[_9,_5,_13]', X). +test('floor_4', all(X == [2])) :- + run_from_atom('⌋', ["test",2,3], X). +test('floor_5', all(X == ["test"])) :- + run_from_atom('⌋', ["test","z"], X). +test('floor_6', all(X == [123])) :- + run_from_atom('⌋₁', 123, X). +test('floor_7', all(X == [123])) :- + run_from_atom('⌋₁', 123.45, X). +test('floor_8', all(X == [-124])) :- + run_from_atom('⌋₁', '_123.45', X). + + +/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + BRACHYLOG_RANGE_ASCENDING +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ +test('range_ascending_1', all(X == [[0]])) :- + run_from_atom('⟦', 0, X). +test('range_ascending_2', all(X == [[0,1,2,3,4,5]])) :- + run_from_atom('⟦', 5, X). +test('range_ascending_3', all(X == [[-5,-4,-3,-2,-1,0]])) :- + run_from_atom('⟦', '_5', X). +test('range_ascending_4', all(X == [[1,2,3,4,5]])) :- + run_from_atom('⟦₁', 5, X). +test('range_ascending_5', all(X == [[9,10,11,12,13]])) :- + run_from_atom('⟦₂', [9,13], X). + + +/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + BRACHYLOG_RANGE_DESCENDING +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ +test('range_descending_1', all(X == [[0]])) :- + run_from_atom('⟧', 0, X). +test('range_descending_2', all(X == [[5,4,3,2,1,0]])) :- + run_from_atom('⟧', 5, X). +test('range_descending_3', all(X == [[0,-1,-2,-3,-4,-5]])) :- + run_from_atom('⟧', '_5', X). +test('range_descending_4', all(X == [[5,4,3,2,1]])) :- + run_from_atom('⟧₁', 5, X). +test('range_descending_5', all(X == [[13,12,11,10,9]])) :- + run_from_atom('⟧₂', [9,13], X). + + +/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + BRACHYLOG_NATURAL_INTEGER +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ +test('natural_integer_1', all(X == [0])) :- + run_from_atom('ℕ', 0, X). +test('natural_integer_2', all(X == [42])) :- + run_from_atom('ℕ', 42, X). +test('natural_integer_3', fail) :- + run_from_atom('ℕ', "test", _). +test('natural_integer_4', fail) :- + run_from_atom('ℕ', '_3', _). +test('natural_integer_5', fail) :- + run_from_atom('ℕ', [1,2], _). +test('natural_integer_6', fail) :- + run_from_atom('ℕ', 4.2, _). +test('natural_integer_7', all(X == [42])) :- + run_from_atom('ℕ₄₂', 42, X). +test('natural_integer_8', fail) :- + run_from_atom('ℕ₄₂', 41, _). + + +/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + BRACHYLOG_INTEGER +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ +test('integer_1', all(X == [0])) :- + run_from_atom('ℤ', 0, X). +test('integer_2', all(X == [42])) :- + run_from_atom('ℤ', 42, X). +test('integer_3', fail) :- + run_from_atom('ℤ', "test", _). +test('integer_4', all(X == [-3])) :- + run_from_atom('ℤ', '_3', X). +test('integer_5', fail) :- + run_from_atom('ℤ', [1,2], _). +test('integer_6', fail) :- + run_from_atom('ℤ', 4.2, _). +test('integer_7', all(X == [-42])) :- + run_from_atom('ℤ₄₂', '_42', X). +test('integer_8', fail) :- + run_from_atom('ℤ₄₂', '_41', _). + + +/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + BRACHYLOG_FLOAT +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ +test('float_1', all(X == [4.2])) :- + run_from_atom('ℝ', 4.2, X). +test('float_2', all(X == [0.0])) :- + run_from_atom('ℝ', 0.0, X). +test('float_3', all(X == [-4.2])) :- + run_from_atom('ℝ', '_4.2', X). +test('float_4', fail) :- + run_from_atom('ℝ', 0, _). +test('float_5', fail) :- + run_from_atom('ℝ', 42, _). +test('float_6', all(X == [42])) :- + run_from_atom('ℝ₁', 42, X). + + +/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + BRACHYLOG_EMPTY +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ +test('empty_1', nondet) :- + run_from_atom('∅', [], _). +test('empty_2', nondet) :- + run_from_atom('∅', 0, _). +test('empty_3', nondet) :- + run_from_atom('∅', "", _). +test('empty_4', nondet) :- + run_from_atom('∅', 0.0, _). +test('empty_5', fail) :- + run_from_atom('∅', [1], _). +test('empty_6', fail) :- + run_from_atom('∅', 1, _). +test('empty_7', fail) :- + run_from_atom('∅', "a", _). + + +/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + BRACHYLOG_DIFFERENT +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ +test('different_1', all(X == [12345])) :- + run_from_atom('≠', 12345, X). +test('different_1', fail) :- + run_from_atom('≠', 12344, _). +test('different_1', all(X == [[1,2,3]])) :- + run_from_atom('≠', [1,2,3], X). +test('different_1', fail) :- + run_from_atom('≠', [1,2,1], _). + + +/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + BRACHYLOG_INTEGER_DIVISION +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ +test('integer_division_1', all(X == [3])) :- + run_from_atom('÷', [6,2], X). +test('integer_division_2', all(X == [3])) :- + run_from_atom('÷', [7,2], X). +test('integer_division_3', all(X == [-3])) :- + run_from_atom('÷', '[_6,2]', X). +test('integer_division_1', fail) :- + run_from_atom('÷', '[6,0]', _). +test('integer_division_1', all(X == [0])) :- + run_from_atom('÷', '[0,_42]', X). +test('integer_division_1', all(X == [3])) :- + run_from_atom('÷', [6.2,2], X). +test('integer_division_1', all(X == [2])) :- + run_from_atom('÷₃', 6, X). + + +/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + BRACHYLOG_MULTIPLY +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ +test('multiply_1', all(X == [1])) :- + run_from_atom('×', [], X). +test('multiply_2', all(X == [12])) :- + run_from_atom('×', [6,2], X). +test('multiply_3', all(X == [12])) :- + run_from_atom('×', [2,6], X). +test('multiply_4', all(X == [-12])) :- + run_from_atom('×', '[_6,2]', X). +test('multiply_5', all(X == [24])) :- + run_from_atom('×', [2,3,4], X). +test('multiply_6', all(X == [0])) :- + run_from_atom('×', '[0,_42]', X). +test('multiply_7', all(X == [12.4])) :- + run_from_atom('×', [6.2,2], X). +test('multiply_8', all(X == [18])) :- + run_from_atom('×₃', 6, X). + + +/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + BRACHYLOG_MODULO +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ +test('modulo_1', all(X == [1])) :- + run_from_atom('%', [4,3], X). +test('modulo_2', all(X == [0])) :- + run_from_atom('%', [4,2], X). +test('modulo_3', all(X == [4])) :- + run_from_atom('%', [42,19], X). + + +/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + BRACHYLOG_EXP +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ +test('exp_1', all(X == [22026.465794806718])) :- + run_from_atom('*', 10, X). +test('exp_2', all(X == [2.302585092994046])) :- + run_from_atom('*₁', 10, X). +test('exp_3', all(X == [-0.8390715290764524])) :- + run_from_atom('*₂', 10, X). +test('exp_4', all(X == [-0.5440211108893698])) :- + run_from_atom('*₃', 10, X). +test('exp_5', all(X == [0.6483608274590866])) :- + run_from_atom('*₄', 10, X). +test('exp_6', all(X == [1.0471975511965979])) :- + run_from_atom('*₅', 0.5, X). +test('exp_7', all(X == [0.5235987755982989])) :- + run_from_atom('*₆', 0.5, X). +test('exp_8', all(X == [1.4711276743037347])) :- + run_from_atom('*₇', 10, X). +test('exp_9', all(X == [11013.232920103323])) :- + run_from_atom('*₈', 10, X). +test('exp_10', all(X == [11013.232874703393])) :- + run_from_atom('*₉', 10, X). +test('exp_11', all(X == [0.9999999958776927])) :- + run_from_atom('*₁₀', 10, X). +test('exp_12', all(X == [2.993222846126381])) :- + run_from_atom('*₁₁', 10, X). +test('exp_13', all(X == [2.99822295029797])) :- + run_from_atom('*₁₂', 10, X). +test('exp_14', all(X == [0.5493061443340549])) :- + run_from_atom('*₁₃', 0.5, X). + + +/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + BRACHYLOG_PLUS +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ +test('plus_1', all(X == [3])) :- + run_from_atom('+', [1,2], X). +test('plus_2', all(X == [2])) :- + run_from_atom('+', '[_3,5]', X). +test('plus_3', all(X == [-5])) :- + run_from_atom('+', '[_3,_2]', X). +test('plus_4', all(X == [21])) :- + run_from_atom('+', [1,2,3,4,5,6], X). +test('plus_5', all(X == [4.6])) :- + run_from_atom('+', [1.2,3.4], X). +test('plus_6', all(X == [13])) :- + run_from_atom('+', [13,0,0,0,0], X). +test('plus_7', all(X == [67])) :- + run_from_atom('+₄₂', 25, X). + + +/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + BRACHYLOG_MINUS +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ +test('minus_1', all(X == [-1])) :- + run_from_atom('-', [1,2], X). +test('minus_2', all(X == [-8])) :- + run_from_atom('-', '[_3,5]', X). +test('minus_3', all(X == [2])) :- + run_from_atom('-', '[_1,_3]', X). +test('minus_4', all(X == [-3])) :- + run_from_atom('-', [1,2,3,4,5,6], X). +test('minus_5', all(X == [-2.2])) :- + run_from_atom('-', [1.2,3.4], X). +test('minus_6', all(X == [13])) :- + run_from_atom('-', [13,0,0,0,0], X). +test('minus_7', all(X == [-17])) :- + run_from_atom('-₄₂', 25, X). + + +/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + BRACHYLOG_DIVIDE +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ +test('divide_1', all(X == [0.5])) :- + run_from_atom('/', [1,2], X). +test('divide_2', all(X == [3])) :- + run_from_atom('/', [6,2], X). +test('divide_3', all(X == [-0.5])) :- + run_from_atom('/', '[1,_2]', X). +test('divide_4', all(X == [0.1111111111111111])) :- + run_from_atom('/₁', 9, X). + + +/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + BRACHYLOG_LESS +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ +test('less_1', all(X == [2])) :- + run_from_atom('1<2', _, X). +test('less_2', all(X == [2])) :- + run_from_atom('_1<2', _, X). +test('less_3', fail) :- + run_from_atom('0<0', _, _). +test('less_4', fail) :- + run_from_atom('13<13', _, _). +test('less_5', fail) :- + run_from_atom('_42<_42', _, _). +test('less_6', all(X == [[1,2,3]])) :- + run_from_atom('[1,2,3]<₁', _, X). +test('less_7', all(X == [[-1,0,1]])) :- + run_from_atom('[_1,0,1]<₁', _, X). +test('less_8', all(X == [[-42,-23,-16]])) :- + run_from_atom('[_42,_23,_16]<₁', _, X). +test('less_9', all(X == [[1,2,3]])) :- + run_from_atom('[1,I,3]<₁', _, X). +test('less_10', fail) :- + run_from_atom('2<1', _, _). +test('less_11', fail) :- + run_from_atom('2<_1', _, _). +test('less_12', fail) :- + run_from_atom('[1,3,2]<₁', _, _). +test('less_13', fail) :- + run_from_atom('[1,I,_1]<₁', _, _). + + +/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + BRACHYLOG_EQUAL +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ +test('equal_1', all(X == [1111])) :- + run_from_atom('=', 1111, X). +test('equal_2', all(X == [[]])) :- + run_from_atom('=', [], X). +test('equal_3', all(X == [0])) :- + run_from_atom('=', 0, X). +test('equal_4', all(X == [[42,42,42,42]])) :- + run_from_atom('=', '[X,Y,42,Z]', X). +test('equal_5', fail) :- + run_from_atom('=', [1,1,1,2,1], _). + + +/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + BRACHYLOG_GREATER +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ +test('greater_1', all(X == [1])) :- + run_from_atom('2>1', _, X). +test('greater_2', all(X == [-1])) :- + run_from_atom('2>_1', _, X). +test('greater_3', fail) :- + run_from_atom('0>0', _, _). +test('greater_4', fail) :- + run_from_atom('13>13', _, _). +test('greater_5', fail) :- + run_from_atom('_42>_42', _, _). +test('greater_6', all(X == [[3,2,1]])) :- + run_from_atom('[3,2,1]>₁', _, X). +test('greater_7', all(X == [[1,0,-1]])) :- + run_from_atom('[1,0,_1]>₁', _, X). +test('greater_8', all(X == [[-16,-23,-42]])) :- + run_from_atom('[_16,_23,_42]>₁', _, X). +test('greater_9', all(X == [[3,2,1]])) :- + run_from_atom('[3,I,1]>₁', _, X). +test('greater_10', fail) :- + run_from_atom('1>2', _, _). +test('greater_11', fail) :- + run_from_atom('_1>2', _, _). +test('greater_12', fail) :- + run_from_atom('[1,3,2]>₁', _, _). +test('greater_13', fail) :- + run_from_atom('[_1,I,1]>₁', _, _). + + +/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + BRACHYLOG_TRANSPOSE +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ +test('transpose_1', all(X == [[[1,4,7],[2,5,8],[3,6,9]]])) :- + run_from_atom('\\', [[1,2,3],[4,5,6],[7,8,9]], X). + + +/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + BRACHYLOG_POWER +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ +test('power_1', all(X == [8])) :- + run_from_atom('^', [2,3], X). +test('power_2', all(X == [-8])) :- + run_from_atom('^', '[_2,3]', X). +test('power_3', all(X == [1])) :- + run_from_atom('^', [1,50], X). +test('power_4', all(X == [0])) :- + run_from_atom('^', [0,42], X). +test('power_5', all(X == [1])) :- + run_from_atom('^', [7,0], X). +test('power_6', all(X == [49])) :- + run_from_atom('^₂', 7, X). + + +:- end_tests(predicates). + + +% Useful templates +test('_', all(X == [])) :- + run_from_atom('', _, X). + +test('_', fail) :- + run_from_atom('', _, _).