Exemplo n.º 1
0
def test_retract_logical_update_view():
    e = get_engine("""
        p :- retract(p :- true), fail.
        p :- true.
    """)
    assert_true("p.", e)
    assert_false("p.", e)
Exemplo n.º 2
0
def test_retract_logical_update_view():
    e = get_engine("""
        p :- retract(p :- true), fail.
        p :- true.
    """)
    assert_true("p.", e)
    assert_false("p.", e)
Exemplo n.º 3
0
def test_cut():
    e = get_engine("""
        f(0).
        f(X) :- Y is X - 1, !, f(Y).
        f(X) :- Y is X - 2, !, f(Y).
    """)
    assert_true("f(20).", e)
Exemplo n.º 4
0
def test_cut():
    e = get_engine("""
        f(0).
        f(X) :- Y is X - 1, !, f(Y).
        f(X) :- Y is X - 2, !, f(Y).
    """)
    assert_true("f(20).", e)
Exemplo n.º 5
0
def test_standard_comparison():
    assert_true("X = Y, f(X, Y, X, Y) == f(X, X, Y, Y).")
    assert_true("X = Y, f(X, Y, X, Z) \\== f(X, X, Y, Y).")
    assert_true("""X \\== Y, ((X @< Y, X @=< X, X @=< Y, Y @> X);
                              (X @> Y, X @>= X, X @>= Y, Y @< X)).""")
    assert_true("'\\\\=='(f(X, Y), 12).")
    assert_true("X = f(a), Y = f(b), Y @> X.")
Exemplo n.º 6
0
def test_standard_comparison():
    assert_true("X = Y, f(X, Y, X, Y) == f(X, X, Y, Y).")
    assert_true("X = Y, f(X, Y, X, Z) \\== f(X, X, Y, Y).")
    assert_true("""X \\== Y, ((X @< Y, X @=< X, X @=< Y, Y @> X);
                              (X @> Y, X @>= X, X @>= Y, Y @< X)).""")
    assert_true("'\\\\=='(f(X, Y), 12).")
    assert_true("X = f(a), Y = f(b), Y @> X.")
Exemplo n.º 7
0
def test_between():
    assert_true("between(12, 15, 12).")
    assert_true("between(-5, 15, 0).")
    assert_false("between(12, 15, 6).")
    assert_false("between(12, 15, 16).")
    heaps = collect_all(Engine(), "between(1, 4, X).")
    assert len(heaps) == 4
    assert heaps[0]['X'].num == 1
Exemplo n.º 8
0
def test_runstring():
    e = get_engine("foo(a, c).")
    e.runstring("""
        :- op(450, xfy, foo).
        a foo b.
        b foo X :- a foo X.
    """)
    assert_true("foo(a, b).", e)
Exemplo n.º 9
0
def test_runstring():
    e = get_engine("foo(a, c).")
    e.runstring("""
        :- op(450, xfy, foo).
        a foo b.
        b foo X :- a foo X.
    """)
    assert_true("foo(a, b).", e)
Exemplo n.º 10
0
def test_atom_concat():
    assert_true("atom_concat(ab, cdef, abcdef).")
    assert_true("atom_concat(ab, cdef, X), X = abcdef.")
    assert_true("atom_concat(ab, X, abcdef), X = cdef.")
    assert_true("atom_concat(X, cdef, abcdef), X = ab.")
    assert_true("atom_concat(1, Y, '1def'), Y = def.")
    heaps = collect_all(Engine(), "atom_concat(X, Y, abcd), atom(X), atom(Y).")
    assert len(heaps) == 5
Exemplo n.º 11
0
def test_between():
    assert_true("between(12, 15, 12).")
    assert_true("between(-5, 15, 0).")
    assert_false("between(12, 15, 6).")
    assert_false("between(12, 15, 16).")
    heaps = collect_all(Engine(), "between(1, 4, X).")
    assert len(heaps) == 4
    assert heaps[0]['X'].num == 1
Exemplo n.º 12
0
def test_comparison():
    assert_true("1 =:= 1.0.")
    assert_true("1 + 1 > 1.")
    assert_true("1 + 0.001 >= 1 + 0.001.")
    assert_true("1 + 0.001 =< 1 + 0.001.")
    assert_false("1 > 1.")
    assert_false("1 =\\= 1.0.")
    assert_true("1 =\\= 32.")
Exemplo n.º 13
0
def test_backtrack_to_same_choice_point():
    e = get_engine("""
        a(a).
        b(b).
        start(Z) :- Z = X, f(X, b), X == b, Z == b.
        f(X, Y) :- a(Y).
        f(X, Y) :- X = a, a(Y).
        f(X, Y) :- X = b, b(Y).
    """)
    assert_true("start(Z).", e)
Exemplo n.º 14
0
def test_atom_concat():
    assert_true("atom_concat(ab, cdef, abcdef).")
    assert_true("atom_concat(ab, cdef, X), X = abcdef.")
    assert_true("atom_concat(ab, X, abcdef), X = cdef.")
    assert_true("atom_concat(X, cdef, abcdef), X = ab.")
    assert_true("atom_concat(1, Y, '1def'), Y = def.")
    heaps = collect_all(
        Engine(),
        "atom_concat(X, Y, abcd), atom(X), atom(Y).")
    assert len(heaps) == 5
Exemplo n.º 15
0
def test_backtrack_to_same_choice_point():
    e = get_engine("""
        a(a).
        b(b).
        start(Z) :- Z = X, f(X, b), X == b, Z == b.
        f(X, Y) :- a(Y).
        f(X, Y) :- X = a, a(Y).
        f(X, Y) :- X = b, b(Y).
    """)
    assert_true("start(Z).", e)
Exemplo n.º 16
0
def test_not_with_cut():
    e = get_engine("""
    p1 :- \\+ q1.
    q1 :- fail.
    q1 :- true.
    
    p2:- \\+ q2.
    q2 :- !, fail.
    q2 :- true.
    """)
    assert_false("p1.", e)
    assert_true("p2.", e)
Exemplo n.º 17
0
def test_consult():
    p = py.test.ensuretemp("prolog")
    f = p.join("test.pl")
    f.write("g(a, a). g(a, b).")
    e = get_engine("g(c, c).")
    assert_true("g(c, c).", e)
    assert_true("consult('%s')." % (f, ), e)
    assert_true("g(c, c).", e)
    assert_true("g(a, a).", e)
    assert_true("g(a, b).", e)
    py.test.raises(error.CatchableError, assert_true,
                   "consult('/hopefully/does/not/exist').")
Exemplo n.º 18
0
def test_not_with_cut():
    e = get_engine("""
    p1 :- \\+ q1.
    q1 :- fail.
    q1 :- true.
    
    p2:- \\+ q2.
    q2 :- !, fail.
    q2 :- true.
    """)
    assert_false("p1.", e)
    assert_true("p2.", e)
Exemplo n.º 19
0
def test_cut():
    e = get_engine("""
        g(a).
        g(b).
        a(a).
        b(b).
        f(X) :- g(X),!,b(X).
        f(x).
        f(y).
    """)
    heaps = collect_all(e, "f(X).")
    assert len(heaps) == 0
    assert_true("!.")
Exemplo n.º 20
0
def test_consult():
    p = py.test.ensuretemp("prolog")
    f = p.join("test.pl")
    f.write("g(a, a). g(a, b).")
    e = get_engine("g(c, c).")
    assert_true("g(c, c).", e)
    assert_true("consult('%s')." % (f, ), e)
    assert_true("g(c, c).", e)
    assert_true("g(a, a).", e)
    assert_true("g(a, b).", e)
    py.test.raises(
        error.CatchableError,
        assert_true, "consult('/hopefully/does/not/exist').")
Exemplo n.º 21
0
def test_cut():
    e = get_engine("""
        g(a).
        g(b).
        a(a).
        b(b).
        f(X) :- g(X),!,b(X).
        f(x).
        f(y).
    """)
    heaps = collect_all(e, "f(X).")
    assert len(heaps) == 0
    assert_true("!.")
Exemplo n.º 22
0
def test_cut3():
    e = get_engine("""
        member(H, [H | _]).
        member(H, [_ | T]) :- member(H, T).

        s(a, L) :- !, fail.
        s(b, L).
        s(X, L) :-
            member(Y, L),
            L = [_| S],
            s(Y, S).
    """)
    #    import pdb; pdb.set_trace()
    assert_true("s(d, [a, b]).", e)
Exemplo n.º 23
0
def test_cut3():
    e = get_engine("""
        member(H, [H | _]).
        member(H, [_ | T]) :- member(H, T).

        s(a, L) :- !, fail.
        s(b, L).
        s(X, L) :-
            member(Y, L),
            L = [_| S],
            s(Y, S).
    """)
    #    import pdb; pdb.set_trace()
    assert_true("s(d, [a, b]).", e)
Exemplo n.º 24
0
def test_assert_at_right_end():
    e = get_engine("g(b, b). f(b, b). h(b, b).")
    assert_true("assert(g(a, a)).", e)
    assert_true("assertz(f(a, a)).", e)
    assert_true("A = a, asserta(h(A, A)).", e)
    f = assert_true("g(B, B).", e)
    assert f['B'].name == "b"
    f = assert_true("f(B, B).", e)
    assert f['B'].name == "b"
    assert_false("h(c, c).", e)
    f = assert_true("h(B, B).", e)
    assert f['B'].name == "a"
Exemplo n.º 25
0
def test_assert_at_right_end():
    e = get_engine("g(b, b). f(b, b). h(b, b).")
    assert_true("assert(g(a, a)).", e)
    assert_true("assertz(f(a, a)).", e)
    assert_true("A = a, asserta(h(A, A)).", e)
    f = assert_true("g(B, B).", e)
    assert f['B'].name == "b"
    f = assert_true("f(B, B).", e)
    assert f['B'].name == "b"
    assert_false("h(c, c).", e)
    f = assert_true("h(B, B).", e)
    assert f['B'].name == "a"
Exemplo n.º 26
0
def test_nonvar():
    e = get_engine("""
        g(X) :- nonvar(X).
        g(x, X) :- nonvar(x), nonvar(X).
        f(X, Y) :- nonvar(X), nonvar(Y).
    """)
    assert_true("g(a).", e)
    assert_false("g(X).", e)
    assert_true("g(x).", e)
    assert_true("g(x, a).", e)
    assert_true("g(X, X).", e)
    assert_false("f(X, X).", e)
Exemplo n.º 27
0
def test_nonvar():
    e = get_engine("""
        g(X) :- nonvar(X).
        g(x, X) :- nonvar(x), nonvar(X).
        f(X, Y) :- nonvar(X), nonvar(Y).
    """)
    assert_true("g(a).", e)
    assert_false("g(X).", e)
    assert_true("g(x).", e)
    assert_true("g(x, a).", e)
    assert_true("g(X, X).", e)
    assert_false("f(X, X).", e)
Exemplo n.º 28
0
def test_exception_handling():
    assert_true("catch(f, E, true).")
    assert_true("catch(throw(error), E, true).")
    py.test.raises(error.CatchableError, assert_true,
                   "catch(true, E, fail), f.")
    py.test.raises(error.CatchableError, assert_true,
                   "catch(throw(error), failure, fail).")
    assert_true("catch(catch(throw(error), failure, fail), error, true).")
Exemplo n.º 29
0
def test_exception_handling():
    assert_true("catch(f, E, true).")
    assert_true("catch(throw(error), E, true).")
    py.test.raises(error.CatchableError,
                   assert_true, "catch(true, E, fail), f.")
    py.test.raises(error.CatchableError,
                   assert_true, "catch(throw(error), failure, fail).")
    assert_true("catch(catch(throw(error), failure, fail), error, true).")
Exemplo n.º 30
0
def test_call():
    e = get_engine("g(b, b).")
    assert_true("call(g(X, X)).", e)
    assert_true("X =.. [g, b, b], call(X).", e)
    e = get_engine("""
        g(X) :- call(f(X)).
        g(a).
        g(b).
        f(X) :- !, h(X).
        f(a).
        f(b).
        h(X) :- fail.
        withcut(X) :- call(!), fail.
        withcut(a).
        """)
    heaps = collect_all(e, "g(X).")
    assert len(heaps) == 2
    assert_true("withcut(a).", e)
    assert_true("call((!, true)).")
Exemplo n.º 31
0
def test_call():
    e = get_engine("g(b, b).")
    assert_true("call(g(X, X)).", e)
    assert_true("X =.. [g, b, b], call(X).", e)
    e = get_engine("""
        g(X) :- call(f(X)).
        g(a).
        g(b).
        f(X) :- !, h(X).
        f(a).
        f(b).
        h(X) :- fail.
        withcut(X) :- call(!), fail.
        withcut(a).
        """)
    heaps = collect_all(e, "g(X).")
    assert len(heaps) == 2
    assert_true("withcut(a).", e)
    assert_true("call((!, true)).")
Exemplo n.º 32
0
def test_not():
    e = get_engine("""
        g(a, a).
        g(b, a).
        g(b, b).

        m(o, a).
        m(o, b).
        m(o, c).
        same(X, X).

        sibling(X, Y) :- m(Z, X), m(Z, Y), \\+same(X, Y).
    """)
    assert_true("not((!, fail)).", e)
    assert_true("not(g(b, c)).", e)
    assert_false("not(g(a, a)).", e)
    assert_true("\\+(g(b, c)).", e)
    assert_false("\\+(g(a, a)).", e)
    assert_false("not(!).", e)

    heaps = collect_all(e, "sibling(a, X).")
    assert len(heaps) == 2
Exemplo n.º 33
0
def test_not():
    e = get_engine("""
        g(a, a).
        g(b, a).
        g(b, b).

        m(o, a).
        m(o, b).
        m(o, c).
        same(X, X).

        sibling(X, Y) :- m(Z, X), m(Z, Y), \\+same(X, Y).
    """)
    assert_true("not((!, fail)).", e)
    assert_true("not(g(b, c)).", e)
    assert_false("not(g(a, a)).", e)
    assert_true("\\+(g(b, c)).", e)
    assert_false("\\+(g(a, a)).", e)
    assert_false("not(!).", e)

    heaps = collect_all(e, "sibling(a, X).")
    assert len(heaps) == 2
Exemplo n.º 34
0
def test_sub_atom():
    assert_true("sub_atom(abc, B, L, A, bc), B=1, L=2, A=0.")
    assert_false("sub_atom(abc, B, 1, A, bc).")
    assert_true("sub_atom(abcabcabc, 3, 3, A, abc), A=3.")
    assert_true("sub_atom(abcabcabc, B, L, 3, abc), B=3, L=3.")
Exemplo n.º 35
0
def test_simple():
    assert_true("X is 1 + 2, X = 3.")
    assert_true("X is 1.2 + 2.8, X = 4.")
    assert_false("X is 1.1 + 2.8, X = 4.0.")
    assert_true("X is 1 - 2, X = -1.")
    assert_true("X is 1.2 - 1.2, X = 0.")
    assert_true("X is 2 * -2, X = -4.")
    assert_true("X is 2 * -2.1, X = -4.2.")
    assert_true("X is 2 + -2, X = 0.")
    assert_true("X is 2 // -2, X = -1.")

    assert_true("X is 1 << 4, X = 16.")
    assert_true("X is 128 >> 7, X = 1.")
    assert_true("X is 12 \\/ 10, X = 14.")
    assert_true("X is 12 /\\ 10, X = 8.")
    assert_true("X is 12 xor 10, X = 6.")

    assert_true("X is max(12, 13), X = 13.")
    assert_true("X is min(12, 13), X = 12.")
    assert_true("X is max(12, 13.9), X = 13.9.")
    assert_true("X is min(12.1, 13), X = 12.1.")

    assert_true("X is abs(42), X = 42.")
    assert_true("X is abs(-42), X = 42.")
    assert_true("X is abs(42.42), X = 42.42.")
    assert_true("X is abs(-42.42), X = 42.42.")

    assert_true("X is round(0), X = 0.")
    assert_true("X is round(0.3), X = 0.")
    assert_true("X is round(0.4), X = 0.")
    assert_true("X is round(0.5), X = 1.")
    assert_true("X is round(0.6), X = 1.")
    assert_true("X is round(1), X = 1.")
    assert_true("X is round(-0.3), X = 0.")
    assert_true("X is round(-0.4), X = 0.")
    assert_true("X is round(-0.5), X = 0.")
    #assert_true("X is round(-0.6), X = -1.") #XXX fix round
    #assert_true("X is round(-1), X = -1.")

    assert_true("X is ceiling(0), X = 0.")
    assert_true("X is ceiling(0.3), X = 1.")
    assert_true("X is ceiling(0.4), X = 1.")
    assert_true("X is ceiling(0.5), X = 1.")
    assert_true("X is ceiling(0.6), X = 1.")
    assert_true("X is ceiling(1), X = 1.")
    assert_true("X is ceiling(-0.3), X = 0.")
    assert_true("X is ceiling(-0.4), X = 0.")
    assert_true("X is ceiling(-0.5), X = 0.")
    assert_true("X is ceiling(-0.6), X = 0.")
    assert_true("X is ceiling(-1), X = -1.")

    assert_true("X is floor(0), X = 0.")
    assert_true("X is floor(0.3), X = 0.")
    assert_true("X is floor(0.4), X = 0.")
    assert_true("X is floor(0.5), X = 0.")
    assert_true("X is floor(0.6), X = 0.")
    assert_true("X is floor(1), X = 1.")
    assert_true("X is floor(-0.3), X = -1.")
    assert_true("X is floor(-0.4), X = -1.")
    assert_true("X is floor(-0.5), X = -1.")
    assert_true("X is floor(-0.6), X = -1.")
    assert_true("X is floor(-1), X = -1.")

    assert_true("X is float_integer_part(0), X = 0.")
    assert_true("X is float_integer_part(0.3), X = 0.")
    assert_true("X is float_integer_part(0.4), X = 0.")
    assert_true("X is float_integer_part(0.5), X = 0.")
    assert_true("X is float_integer_part(0.6), X = 0.")
    assert_true("X is float_integer_part(1), X = 1.")
    assert_true("X is float_integer_part(-0.3), X = 0.")
    assert_true("X is float_integer_part(-0.4), X = 0.")
    assert_true("X is float_integer_part(-0.5), X = 0.")
    assert_true("X is float_integer_part(-0.6), X = 0.")
    assert_true("X is float_integer_part(-1), X = -1.")

    assert_true("X is float_fractional_part(1), X = 0.")
    assert_true("X is float_fractional_part(2), X = 0.")
    assert_true("X is float_fractional_part(-1), X = 0.")
    assert_true("X is float_fractional_part(1.2), Y is 1.2 - 1, X = Y.")
    assert_true("X is float_fractional_part(1.4), Y is 1.4 - 1, X = Y.")
    assert_true("X is float_fractional_part(1.6), Y is 1.6 - 1, X = Y.")
    assert_true("X is float_fractional_part(-1.2), X is -1.2 + 1, X = Y.")
    assert_true("X is float_fractional_part(-1.4), X is -1.4 + 1, X = Y.")
    assert_true("X is float_fractional_part(-1.6), X is -1.6 + 1, X = Y.")

    assert_true("X is 2 ** 4, X = 16.")
Exemplo n.º 36
0
def test_atom_length():
    assert_true("atom_length('abc', 3).")
    assert_true("atom_length('\\\\', 1).")
    assert_true("atom_length('abc', X), X = 3.")
Exemplo n.º 37
0
 def test_common(self):
     assert_false('fail.')
     assert_true('true.')
Exemplo n.º 38
0
def test_sub_atom():
    assert_true("sub_atom(abc, B, L, A, bc), B=1, L=2, A=0.")
    assert_false("sub_atom(abc, B, 1, A, bc).")
    assert_true("sub_atom(abcabcabc, 3, 3, A, abc), A=3.")
    assert_true("sub_atom(abcabcabc, B, L, 3, abc), B=3, L=3.")
Exemplo n.º 39
0
def test_ifthenelse():
    e = get_engine("f(x). f(y). f(z).")
    assert_false("f(c) -> true.", e)
    assert_true("f(X) -> X \\= x; f(z).", e)
    assert_false("true -> fail.", e)
Exemplo n.º 40
0
def test_once():
    assert_true("once(repeat).")
Exemplo n.º 41
0
def test_once():
    assert_true("once(repeat).")
Exemplo n.º 42
0
def test_findall():
    assert_true("findall(X, (X = a; X = b; X = c), L), L = [a, b, c].")
    assert_true("findall(X + Y, (X = 1), L), L = [1+_].")
Exemplo n.º 43
0
def test_repeat():
    assert_true("repeat, true.")
    py.test.raises(UnificationFailed,
        Engine().run, parse_query_term("repeat, !, fail."))
Exemplo n.º 44
0
def test_atom_length():
    assert_true("atom_length('abc', 3).")
    assert_true("atom_length('\\\\', 1).")
    assert_true("atom_length('abc', X), X = 3.")
Exemplo n.º 45
0
 def DONOTtest_cut(self):
     assert_true('!.')
Exemplo n.º 46
0
def test_parser_access():
    assert_true("current_op(200, xfx, **).")
    f = collect_all(Engine(), "current_op(200, Form, X).")
    assert len(f) == 2
    e = get_engine("""
        foo(a, b).
    """)
    assert_true("op(450, xfy, foo).", e)
    assert_true("a foo b.", e)
    assert_true("op(0, xfy, foo).", e)
    # XXX really a ParseError
    py.test.raises(Exception, assert_false, "a foo b.", e)
    # change precedence of + for funny results :-)
    assert_true("14 is 2 + 3 * 4.", e)
    assert_true("op(350, xfy, +).", e)
    assert_true("20 is 2 + 3 * 4.", e)
    assert_true("op(500, xfy, +).", e)
Exemplo n.º 47
0
def test_ifthenelse():
    e = get_engine("f(x). f(y). f(z).")
    assert_false("f(c) -> true.", e)
    assert_true("f(X) -> X \\= x; f(z).", e)
    assert_false("true -> fail.", e)
Exemplo n.º 48
0
def test_comparison():
    assert_true("1 =:= 1.0.")
    assert_true("1 + 1 > 1.")
    assert_true("1 + 0.001 >= 1 + 0.001.")
    assert_true("1 + 0.001 =< 1 + 0.001.")
    assert_false("1 > 1.")
    assert_true("1.1 > 1.")
    assert_false("1 =\\= 1.0.")
    assert_true("1 =\\= 32.")
Exemplo n.º 49
0
def test_assert_retract():
    e = get_engine("g(b, b).")
    assert_true("g(B, B).", e)
    assert_true("assert(g(c, d)).", e)
    assert_true("assert(g(a, b)).", e)
    assert_true("assert(g(a, b)).", e)  # assert the same rule multiple times
    assert_true("g(B, B).", e)
    assert_true("g(a, b).", e)
    assert_true("g(c, d).", e)
    assert_true("retract(g(B, B)).", e)
    assert_false("g(B, B).", e)
    assert_true("retract(g(a, b)).", e)
    assert_true("g(a, b).", e)
    assert_true("retract(g(a, b)).", e)
    assert_false("retract(g(a, b)).", e)
    assert_false("g(a, b).", e)
    assert_true("g(c, d).", e)
    e = get_engine("""
        g(b, b).
        f(X) :- g(X, b).
        f(a).
    """)
    assert_true("f(b).", e)
    assert_true("f(a).", e)
    assert_true("retract(f(X) :- g(X, Y)), Y == b.", e)
    assert_false("f(b).", e)
    assert_true("f(a).", e)
    prolog_raises("permission_error(X, Y, Z)", "retract(atom(X))")
Exemplo n.º 50
0
def test_is():
    assert_true("5 is 1 + 1 + 1 + 1 + 1.")
Exemplo n.º 51
0
def test_assert_retract():
    e = get_engine("g(b, b).")
    assert_true("g(B, B).", e)
    assert_true("assert(g(c, d)).", e)
    assert_true("assert(g(a, b)).", e)
    assert_true("assert(g(a, b)).", e) # assert the same rule multiple times
    assert_true("g(B, B).", e)
    assert_true("g(a, b).", e)
    assert_true("g(c, d).", e)
    assert_true("retract(g(B, B)).", e)
    assert_false("g(B, B).", e)
    assert_true("retract(g(a, b)).", e)
    assert_true("g(a, b).", e)
    assert_true("retract(g(a, b)).", e)
    assert_false("retract(g(a, b)).", e)
    assert_false("g(a, b).", e)
    assert_true("g(c, d).", e)
    e = get_engine("""
        g(b, b).
        f(X) :- g(X, b).
        f(a).
    """)
    assert_true("f(b).", e)
    assert_true("f(a).", e)
    assert_true("retract(f(X) :- g(X, Y)), Y == b.", e)
    assert_false("f(b).", e)
    assert_true("f(a).", e)
    prolog_raises("permission_error(X, Y, Z)", "retract(atom(X))")
Exemplo n.º 52
0
def test_parser_access():
    assert_true("current_op(200, xfx, **).")
    f = collect_all(Engine(), "current_op(200, Form, X).")
    assert len(f) == 2
    e = get_engine("""
        foo(a, b).
    """)
    assert_true("op(450, xfy, foo).", e)
    assert_true("a foo b.", e)
    assert_true("op(0, xfy, foo).", e)
    # XXX really a ParseError
    py.test.raises(Exception, assert_false, "a foo b.", e) 
    # change precedence of + for funny results :-)
    assert_true("14 is 2 + 3 * 4.", e)
    assert_true("op(350, xfy, +).", e)
    assert_true("20 is 2 + 3 * 4.", e)
    assert_true("op(500, xfy, +).", e)
Exemplo n.º 53
0
def test_findall():
    assert_true("findall(X, (X = a; X = b; X = c), L), L = [a, b, c].")
    assert_true("findall(X + Y, (X = 1), L), L = [1+_].")
Exemplo n.º 54
0
def test_functor():
    assert_true("functor(f(a, b, c), f, 3).")
    assert_true("functor(f(a, b, c), X, Y), X=f, Y=3.")
    assert_true("functor(f, X, Y), X=f, Y=0.")
    assert_true("functor(1, X, Y), X=1, Y=0.")
    assert_true("functor(F, a, 0), F=a.")
    assert_true("functor(F, 12, 0), F=12.")
    assert_true("functor(F, 12.5, 0), F=12.5.")
    assert_true("functor(F, f, 4), F=f(1, 2, 3, 4).")
    assert_true("functor(F, g, 1), F=g(asdf).")
    assert_true("functor(F, g, 3), F=g(X, Y, 1), X = 12, Y = 34, ground(F).")
Exemplo n.º 55
0
def test_functor():
    assert_true("functor(f(a, b, c), f, 3).")
    assert_true("functor(f(a, b, c), X, Y), X=f, Y=3.")
    assert_true("functor(f, X, Y), X=f, Y=0.")
    assert_true("functor(1, X, Y), X=1, Y=0.")
    assert_true("functor(F, a, 0), F=a.")
    assert_true("functor(F, 12, 0), F=12.")
    assert_true("functor(F, 12.5, 0), F=12.5.")
    assert_true("functor(F, f, 4), F=f(1, 2, 3, 4).")
    assert_true("functor(F, g, 1), F=g(asdf).")
    assert_true("functor(F, g, 3), F=g(X, Y, 1), X = 12, Y = 34, ground(F).")
Exemplo n.º 56
0
def test_call_atom():
    e = get_engine("""
        test(a).
        test :- test(_).
    """)
    assert_true("test.", e)
Exemplo n.º 57
0
def test_or_and_call_with_cut():
    assert_false("(!, fail); true.")
    assert_true("(call(!), fail); true.")
Exemplo n.º 58
0
def test_call_atom():
    e = get_engine("""
        test(a).
        test :- test(_).
    """)
    assert_true("test.", e)
Exemplo n.º 59
0
def test_simple():
    assert_true("X is 1 + 2, X = 3.")
    assert_true("X is 1.2 + 2.8, X = 4.")
    assert_false("X is 1.1 + 2.8, X = 4.0.")
    assert_true("X is 1 - 2, X = -1.")
    assert_true("X is 1.2 - 1.2, X = 0.")
    assert_true("X is 2 * -2, X = -4.")
    assert_true("X is 2 * -2.1, X = -4.2.")
    assert_true("X is 2 + -2, X = 0.")
    assert_true("X is 2 // -2, X = -1.")

    assert_true("X is 1 << 4, X = 16.")
    assert_true("X is 128 >> 7, X = 1.")
    assert_true("X is 12 \\/ 10, X = 14.")
    assert_true("X is 12 /\\ 10, X = 8.")
    assert_true("X is 12 xor 10, X = 6.")

    assert_true("X is max(12, 13), X = 13.")
    assert_true("X is min(12, 13), X = 12.")
    assert_true("X is max(12, 13.9), X = 13.9.")
    assert_true("X is min(12.1, 13), X = 12.1.")

    assert_true("X is abs(42), X = 42.")
    assert_true("X is abs(-42), X = 42.")
    assert_true("X is abs(42.42), X = 42.42.")
    assert_true("X is abs(-42.42), X = 42.42.")

    assert_true("X is round(0), X = 0.")
    assert_true("X is round(0.3), X = 0.")
    assert_true("X is round(0.4), X = 0.")
    assert_true("X is round(0.5), X = 1.")
    assert_true("X is round(0.6), X = 1.")
    assert_true("X is round(1), X = 1.")
    assert_true("X is round(-0.3), X = 0.")
    assert_true("X is round(-0.4), X = 0.")
    assert_true("X is round(-0.5), X = 0.")
    #assert_true("X is round(-0.6), X = -1.") #XXX fix round
    #assert_true("X is round(-1), X = -1.")

    assert_true("X is ceiling(0), X = 0.")
    assert_true("X is ceiling(0.3), X = 1.")
    assert_true("X is ceiling(0.4), X = 1.")
    assert_true("X is ceiling(0.5), X = 1.")
    assert_true("X is ceiling(0.6), X = 1.")
    assert_true("X is ceiling(1), X = 1.")
    assert_true("X is ceiling(-0.3), X = 0.")
    assert_true("X is ceiling(-0.4), X = 0.")
    assert_true("X is ceiling(-0.5), X = 0.")
    assert_true("X is ceiling(-0.6), X = 0.")
    assert_true("X is ceiling(-1), X = -1.")

    assert_true("X is floor(0), X = 0.")
    assert_true("X is floor(0.3), X = 0.")
    assert_true("X is floor(0.4), X = 0.")
    assert_true("X is floor(0.5), X = 0.")
    assert_true("X is floor(0.6), X = 0.")
    assert_true("X is floor(1), X = 1.")
    assert_true("X is floor(-0.3), X = -1.")
    assert_true("X is floor(-0.4), X = -1.")
    assert_true("X is floor(-0.5), X = -1.")
    assert_true("X is floor(-0.6), X = -1.")
    assert_true("X is floor(-1), X = -1.")

    assert_true("X is float_integer_part(0), X = 0.")
    assert_true("X is float_integer_part(0.3), X = 0.")
    assert_true("X is float_integer_part(0.4), X = 0.")
    assert_true("X is float_integer_part(0.5), X = 0.")
    assert_true("X is float_integer_part(0.6), X = 0.")
    assert_true("X is float_integer_part(1), X = 1.")
    assert_true("X is float_integer_part(-0.3), X = 0.")
    assert_true("X is float_integer_part(-0.4), X = 0.")
    assert_true("X is float_integer_part(-0.5), X = 0.")
    assert_true("X is float_integer_part(-0.6), X = 0.")
    assert_true("X is float_integer_part(-1), X = -1.")

    assert_true("X is float_fractional_part(1), X = 0.")
    assert_true("X is float_fractional_part(2), X = 0.")
    assert_true("X is float_fractional_part(-1), X = 0.")
    assert_true("X is float_fractional_part(1.2), Y is 1.2 - 1, X = Y.")
    assert_true("X is float_fractional_part(1.4), Y is 1.4 - 1, X = Y.")
    assert_true("X is float_fractional_part(1.6), Y is 1.6 - 1, X = Y.")
    assert_true("X is float_fractional_part(-1.2), X is -1.2 + 1, X = Y.")
    assert_true("X is float_fractional_part(-1.4), X is -1.4 + 1, X = Y.")
    assert_true("X is float_fractional_part(-1.6), X is -1.6 + 1, X = Y.")

    assert_true("X is 2 ** 4, X = 16.")
Exemplo n.º 60
0
def test_or_and_call_with_cut():
    assert_false("(!, fail); true.")
    assert_true("(call(!), fail); true.")