Пример #1
0
def test_or_and_call_with_cut():
    e = get_engine("""
        f :- (!, fail); true.
        g :- (call(!), fail); true.
    """)
    assert_false("f.", e)
    assert_true("g.", e)
Пример #2
0
def test_copy_term_3():
    assert_true("copy_term(a, a, []).")
    assert_true("copy_term(X, Y, []), X \== Y.")
    assert_false("put_attr(X, foor, bar), copy_term(X, Y, _), X == Y.")
    assert_false("put_attr(X, foo, bar), copy_term(X, Y, Z), attvar(Y).")
    assert_true("put_attr(X, foo, bar), copy_term(X, Y, Z), \+ attvar(Y).")
    assert_true(
        "put_attr(X, foo, bar), copy_term(X, Y, Z), Z == [put_attr(Y, foo, bar)], X \== Y."
    )
    assert_true(
        "put_attr(X, foo, bar), put_attr(X, blar, blupp), copy_term(X, Y, Z), Z == [put_attr(Y, foo, bar), put_attr(Y, blar, blupp)], X \== Y."
    )

    e = get_engine("",
                   m="""
        :- module(m, []).
        attr_unify_hook(_, _).
        """)
    assert_true("put_attr(X, m, 1), X = a, copy_term(X, a, Z), Z == [].", e)
    assert_true(
        "put_attr(X, a, 1), put_attr(Y, b, 2), copy_term(f(X,Y), f(A, B), [put_attr(A, a, 1), put_attr(B, b, 2)]), Z \== f(X, Y)."
    )
    assert_true("put_attr(X, a, Y), copy_term(X, A, [put_attr(A, a, Y)]).")
    assert_true("(put_attr(X, m, 1), fail; true), copy_term(X, A, []).")
    assert_true(
        "copy_term(X, A, []), put_attr(X, m, 1), copy_term(X, A, [put_attr(A, m, 1)])."
    )
Пример #3
0
def test_or_with_cut():
    e = get_engine("""
        f(X) :- ((X = 1, !); X = 2), X = 2.
        g(X) :- ((X = 1, !); X = 2), X = 1.
    """)
    assert_false("f(X).", e)
    assert_true("g(X).", e)
Пример #4
0
def test_term_attvars():
    e = get_engine("",
                   m="""
    :- module(m, []).
    attr_unify_hook(_, _).
    """)
    assert_true("term_attvars(a, []).")
    assert_true("term_attvars([], []).")
    assert_false("term_attvars([], 1).")
    assert_true("put_attr(X, m, 1), term_attvars(X, [X]).")
    assert_true("term_attvars(X,Y), Y == [].")
    assert_true("put_attr(X, m, 1), term_attvars(f(g(h(X)), X), [X]).")
    assert_true(
        "put_attr(X, m, 1), put_attr(Y, m, 2), term_attvars(f(X, Y), [X, Y]).")
    assert_false(
        "put_attr(X, m, 1), put_attr(Y, m, 2), X = Y, term_attvars(f(X, Y), [X, Y]).",
        e)
    assert_true(
        "put_attr(X, m, 1), put_attr(Y, m, 2), X = Y, term_attvars(f(X, Y), [X]).",
        e)
    assert_true(
        "put_attr(X, m, 1), put_attr(Y, m, 2), X = Y, term_attvars(f(X, Y), [Y]).",
        e)
    assert_true("put_attr(X, m, 1), term_attvars(f(A, X, B, X), [X]).")
    assert_true("put_attr(X, m, 1), Y = X, term_attvars(f(X, Y), [Y]).")
    assert_true("put_attr(X, m, 1), Y = X, term_attvars(f(X, Y), [X]).")
    assert_true("term_attvars(X, []), put_attr(X, m, 1).")
    assert_true(
        "put_attr(X, m , 1), term_attvars(X, [X]), del_attr(X, m), term_attvars(X, [])."
    )
    assert_true("put_attr(X, m, Y), term_variables(X, L), L == [X].")
Пример #5
0
def test_sub_atom_with_non_var_sub():
    assert_true(
        "sub_atom(abcabc, Before, Length, After, a), Before=3, Length=1, After=2."
    )
    assert_false(
        "sub_atom(abcabc, Before, Length, After, b), Before==3, Length==1, After==2."
    )
Пример #6
0
def test_or_with_cut():
    e = get_engine("""
        f(X) :- ((X = 1, !); X = 2), X = 2.
        g(X) :- ((X = 1, !); X = 2), X = 1.
    """)
    assert_false("f(X).", e)
    assert_true("g(X).", e)
Пример #7
0
def test_backtracking():
    assert_false("(put_attr(X, m, 1), fail); attvar(X).")
    assert_false("put_attr(X, m, 2), (put_attr(X, m, 1), fail); get_attr(X, m, 2).")
    assert_true("(put_attr(X, b, 1), fail); \+ get_attr(X, b, 1).")
    assert_true("put_attr(X, a, 2), ((put_attr(X, b, 1), fail); get_attr(X, a, 2)), \+ get_attr(X, b, 1).")
    assert_true("put_attr(X, a, 2), ((put_attr(X, a, 1), put_attr(X, a, 3), fail); get_attr(X, a, 2)).")
    assert_true("put_attr(X, a, 2), ((put_attr(X, b, 1), put_attr(X, c, 3), fail); get_attr(X, a, 2)), \+ get_attr(X, b, 1), \+ get_attr(X, c, 3).")
Пример #8
0
def test_integration_efficient_bools():
    e = get_engine("",
    swi_bool_pred = """
    :- module(swi_bool_pred, [negate/2]).

    negate(X, Y) :-
        ( nonvar(X)  -> negate3(X, Y)
        ; nonvar(Y)  -> negate3(Y, X)
        ; get_attr(X, swi_bool_pred, OtherX) -> Y = OtherX, X \== Y, put_attr(Y, swi_bool_pred, X)
        ; get_attr(Y, swi_bool_pred, OtherY) -> X = OtherY, X \== Y, put_attr(X, swi_bool_pred, Y)
        ; X \== Y, put_attr(Y, swi_bool_pred, X), put_attr(X, swi_bool_pred, Y)
        ).

    negate3(pred_true, pred_false).
    negate3(pred_false, pred_true).

    attr_unify_hook(Other, Value) :-
        (var(Value) -> (get_attr(Value, swi_bool_pred, Other2)
                            -> Other = Other2, Value \== Other
                            ; put_attr(Value, swi_bool_pred, Other)
                        )
                    ; negate3(Value, Other)).
    """)
    assert_true("swi_bool_pred:negate(X,Y), swi_bool_pred:negate(Y,Z), X==Z, Z=pred_true, X==pred_true, Y==pred_false.", e)
    assert_true("swi_bool_pred:negate(X,Y), swi_bool_pred:negate(Y,Z), X==Z, Z=pred_true, X==pred_true, Y==pred_false.", e)
    assert_true("swi_bool_pred:negate(X,Y), swi_bool_pred:negate(X2,Y2), X=X2, Y==Y2, Y=pred_false, X2==pred_true.", e)
    assert_true("swi_bool_pred:negate(X,Y), swi_bool_pred:negate(X,Z), Y==Z, Z=pred_true, X==pred_false.", e)
    assert_true("swi_bool_pred:negate(X,Y), swi_bool_pred:negate(Y,Z), \+ swi_bool_pred:negate(Z,X).", e)
    assert_true("swi_bool_pred:negate(X,Y), swi_bool_pred:negate(Y,Z), swi_bool_pred:negate(Z,X2), \+ X2=X.", e)
    assert_true("swi_bool_pred:negate(X,Y), swi_bool_pred:negate(Y,Z), X2=X, \+ swi_bool_pred:negate(Z,X2).", e)
    assert_false("swi_bool_pred:negate(X,X).", e)
Пример #9
0
def test_numbervars_bindings():
    assert_true("""
        X = f(A,B,C),
        numbervars(X, 0, 3),
        X = f('$VAR'(0), '$VAR'(1), '$VAR'(2)).
    """, e)
    assert_true("""
        X = f(A,B,C),
        numbervars(X, 5, 8),
        X = f('$VAR'(5), '$VAR'(6), '$VAR'(7)).
    """, e)
    assert_false("""
        X = f(A,B,C),
        A = 123,
        B = C,
        numbervars(X, 5, 8),
        X = f('$VAR'(5), '$VAR'(6), '$VAR'(7)).
    """, e)
    assert_false("""
        X = f(A,B,C),
        A = '$VAR'(5),
        numbervars(X, 5, 8),
        X = f('$VAR'(5), '$VAR'(6), '$VAR'(7)).
    """, e)
    assert_true("""
        X = f(A,B,C),
        A = '$VAR'(5),
        numbervars(X, 5, 7),
        X = f('$VAR'(5), '$VAR'(5), '$VAR'(6)).
    """, e)
Пример #10
0
def test_or_and_call_with_cut():
    e = get_engine("""
        f :- (!, fail); true.
        g :- (call(!), fail); true.
    """)
    assert_false("f.", e)
    assert_true("g.", e)
Пример #11
0
def test_block():
    e = get_engine("""
    :- block f('?', '-', '?'), f('-', '-', '?').
    :- block g('?').
    :- block h('-', '-', '-', '?'), h('-', '-', '?', '?'), h('-', '?', '?', '?').

    f(A, B, C) :-
        C = 10.

    g(_) :-
        assert(gg(1)).

    h(A, B, C, D) :-
        D is A + B + C.
    """, load_system=True)
    assert_false("f(X, Y, Z), Z == 10.", e)
    assert_false("f(a, X, Z), Z == 10.", e)
    assert_true("f(a, b, Z), Z == 10.", e)
    assert_true("f(a, X, Z), \+ Z == 10, X = 5, Z == 10.", e)
    assert_true("f(A, B, Z), \+ Z == 10, A = a, \+ Z == 10, B = b, Z == 10.", e)
    assert_true("f(a, X, Z), (X = 1, fail; true), var(Z).", e)

    prolog_raises("existence_error(_, _)", "g(5), gg(1)", e)
    prolog_raises("existence_error(_, _)", "g(X), gg(1)", e)

    assert_true("h(A, B, C, D), var(D), C = 5, var(D), B = 5, var(D), A = 5, D == 15.", e)
    prolog_raises("instantiation_error", "h(5, B, C, D)", e)
    prolog_raises("instantiation_error", "h(5, 1, C, D)", e)
    assert_true("h(1, 2, 3, 6).", e)
    assert_true("h(A, B, C, D), var(D), B = 5, var(D), C = 5, var(D), A = 5, D == 15.", e)
Пример #12
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)
Пример #13
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)
Пример #14
0
def test_strings():
    assert_true('X = "abc", X = [97, 98, 99].')
    assert_true('X = "", X = [].')
    assert_true('X = [97], X = "a".')
    assert_true('X = [97], X = Y, Y = "a".')
    assert_false('X = "a", X = \'a\'.')
    assert_true('X = "²³¼½¬", X = [178, 179, 188, 189, 172].')
    assert_true('X = [], X = "".')
Пример #15
0
def test_strings():
    assert_true('X = "abc", X = [97, 98, 99].')
    assert_true('X = "", X = [].')
    assert_true('X = [97], X = "a".')
    assert_true('X = [97], X = Y, Y = "a".')
    assert_false('X = "a", X = \'a\'.')
    assert_true('X = "²³¼½¬", X = [178, 179, 188, 189, 172].')
    assert_true('X = [], X = "".')
Пример #16
0
def test_basic_term_variables():
    assert_true("term_variables(X, [X]).")
    assert_false("term_variables(X, []).")
    assert_true("term_variables(f(X, Y), [X, Y]).")
    assert_true("term_variables(a, []).")
    assert_true("term_variables(123, []).")
    assert_true("term_variables(f(Z, g(X), Y), [Z, X, Y]).")
    assert_false("term_variables(a, a).")
Пример #17
0
def test_basic_term_variables():
    assert_true("term_variables(X, [X]).")
    assert_false("term_variables(X, []).")
    assert_true("term_variables(f(X, Y), [X, Y]).")
    assert_true("term_variables(a, []).")
    assert_true("term_variables(123, []).")
    assert_true("term_variables(f(Z, g(X), Y), [Z, X, Y]).")
    assert_false("term_variables(a, a).")
Пример #18
0
def test_repeat():
    assert_true("repeat, true.")
    e = Engine()
    assert_false("repeat, !, fail.")
    # hard to test repeat differently
    e = get_engine('f :- repeat, !, fail.')
    assert_false('f.', e)
    assert_true('f; true.', e)
Пример #19
0
def test_repeat():
    assert_true("repeat, true.")
    e = Engine()
    assert_false("repeat, !, fail.")
    # hard to test repeat differently
    e = get_engine('f :- repeat, !, fail.')
    assert_false('f.', e)
    assert_true('f; true.', e)
Пример #20
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
    assert heaps[-1]['X'].num == 4
Пример #21
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.")
Пример #22
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
    assert heaps[-1]['X'].num == 4
Пример #23
0
def test_del_attrs():
    assert_true("del_attrs(1).")
    assert_true("del_attrs(a).")
    assert_true("\+ attvar(X), del_attrs(X).")
    assert_false("put_attr(X, m, 1), del_attrs(X), get_attr(X, m, 1).")
    assert_true("put_attr(X, m, 1), del_attrs(X), \+ attvar(X).")
    assert_true("put_attr(X, m, 1), del_attrs(X), del_attrs(X).")
    assert_true("put_attr(X, m, 1), (del_attrs(X), fail; true), get_attr(X, m, 1).")
    assert_true("put_attr(X, m, 1), put_attr(X, m, 2), del_attrs(X), \+ attvar(X).")
Пример #24
0
def test_call_cut():
    e = get_engine("""
        f(X) :- call(X).
        f(!).
    """)
    heaps = collect_all(e, "f(!).")
    assert len(heaps) == 2
    assert_true("call(((X = a; X = b), !, X = b)); X = c.")
    assert_false("(((X = a; X = b), !, X = b)); X = c.")
Пример #25
0
def test_or():
    assert_false("fail;fail.")
    e = get_engine("""
        f(X, Y) :-
               ( fail
               ; X \== Y
               ).
    """)
    assert_false("f(X,X).", e)
Пример #26
0
def xtest_get_attrs():
    assert_false("get_attrs(X, Y).")
    assert_false("get_attrs(a, Y).")
    assert_false("get_attrs(1, Y).")
    assert_true("put_attr(X, m, 1), get_attrs(X, att(m, 1, [])).")
    assert_false("put_attr(X, m, 1), get_attrs(f(X), att(m, 1, [])).")
    assert_true("put_attr(X, m, 1), put_attr(X, a, 2), get_attrs(X, att(m, 1, att(a, 2, []))).")
    assert_false("(put_attr(X, m, 1), fail; true), get_attrs(X, L).")
    assert_true("put_attr(X, m, 1), put_attr(Y, m, X), get_attrs(Y, att(m, X, [])), get_attrs(X, att(m, 1, [])).")
Пример #27
0
def test_or():
    assert_false("fail;fail.")
    e = get_engine("""
        f(X, Y) :-
               ( fail
               ; X \== Y
               ).
    """)
    assert_false("f(X,X).", e)
Пример #28
0
def test_frozen():
    assert_false("frozen(a, a).", e)
    assert_true("frozen(1, X), X == true.", e)
    assert_true("frozen(X, X), X == true.", e)
    assert_true("frozen(X, Y), Y == true, var(X).", e)
    assert_true("freeze(X, f(a)), frozen(X, user:f(a)).", e)
    assert_true("freeze(X, m:g(q)), frozen(X, R), R == m:g(q).", e)
    assert_true("freeze(X, true), frozen(X, user:true), freeze(X, fail), frozen(X, (user:true, user:fail)).", e)
    assert_true("freeze(X, true), X = a, frozen(X, R), R == true.", e)
Пример #29
0
def test_call_cut():
    e = get_engine("""
        f(X) :- call(X).
        f(!).
    """)
    heaps = collect_all(e, "f(!).")
    assert len(heaps) == 2
    assert_true("call(((X = a; X = b), !, X = b)); X = c.")
    assert_false("(((X = a; X = b), !, X = b)); X = c.")
Пример #30
0
def test_4_queens():
    e = get_engine("""
    queens(Vars) :-
        Vars = [_A, _B, _C, _D],
        safe(Vars),
        perm([1,2,3,4], Vars).

    safe([]).
    safe([H|T]) :-
        safe(T),
        attack(H, 1, T).

    attack(_, _, []).
    attack(X, N, [H|T]) :-
        when((nonvar(X), nonvar(H)), (not(X is H + N; X is H - N))),
        N1 is N + 1,
        attack(X, N1, T).

    perm([1,2,3,4], [1,2,3,4]).
    perm([1,2,3,4], [1,2,4,3]).
    perm([1,2,3,4], [1,3,2,4]).
    perm([1,2,3,4], [1,3,4,2]).
    perm([1,2,3,4], [1,4,2,3]).
    perm([1,2,3,4], [1,4,3,2]).

    perm([1,2,3,4], [2,1,3,4]).
    perm([1,2,3,4], [2,1,4,3]).
    perm([1,2,3,4], [2,3,1,4]).
    perm([1,2,3,4], [2,3,4,1]).
    perm([1,2,3,4], [2,4,1,3]).
    perm([1,2,3,4], [2,4,2,1]).

    perm([1,2,3,4], [3,1,2,4]).
    perm([1,2,3,4], [3,1,4,2]).
    perm([1,2,3,4], [3,2,1,4]).
    perm([1,2,3,4], [3,2,4,1]).
    perm([1,2,3,4], [3,4,1,2]).
    perm([1,2,3,4], [3,4,2,1]).

    perm([1,2,3,4], [4,1,3,2]).
    perm([1,2,3,4], [4,1,2,3]).
    perm([1,2,3,4], [4,2,1,3]).
    perm([1,2,3,4], [4,2,3,1]).
    perm([1,2,3,4], [4,3,1,2]).
    perm([1,2,3,4], [4,3,2,1]).
    """,
                   load_system=True)

    assert_true("queens([2, 4, 1, 3]).", e)
    assert_true("queens([3, 1, 4, 2]).", e)
    assert_false("queens([4, 2, 1, 3]).", e)
    assert_true("queens(X), X == [2, 4, 1, 3].", e)
    assert_true("queens(X), X == [3, 1, 4, 2].", e)
    assert_false("queens(X), X == [4, 2, 1, 3].", e)
    assert_true("findall(X, queens(X), L), L == [[2, 4, 1, 3], [3, 1, 4, 2]].",
                e)
Пример #31
0
def XXX_test_at_end_of_stream_or():
    src = "__src__"
    create_file(src, "a")
    try:
        assert_false("""
        open('%s', read, S),
        (at_end_of_stream(S); at_end_of_stream(S)).
        """ % src)
    finally:
        delete_file(src)
Пример #32
0
def XXX_test_at_end_of_stream_or():
    src = "__src__"
    create_file(src, "a")
    try:
        assert_false("""
        open('%s', read, S),
        (at_end_of_stream(S); at_end_of_stream(S)).
        """ % src)
    finally:
        delete_file(src)
Пример #33
0
def test_put_attrs():
    e = Engine(load_system=True)
    assert_false("put_attrs(X, []), attvar(X).", e)
    prolog_raises("representation_error(A, B)", "put_attrs(a, [])", e)
    prolog_raises("representation_error(A, B)", "put_attrs(a, att(m, 1, []))", e)
    assert_true("put_attrs(X, att(m, 1, [])), get_attr(X, m, 1).", e)
    assert_true("put_attrs(X, att(m, 1, att(n, W, []))), get_attr(X, m, 1), get_attr(X, n, W).", e)
    assert_false("put_attrs(X, att(m, 1, [])), fail; attvar(X).", e)
    assert_true("put_attr(X, m, 1), (put_attrs(X, att(m, 2, [])), fail; true), get_attr(X, m, 1).", e)
    assert_true("put_attr(X, m, 1), put_attrs(X, att(m, 2, [])), get_attr(X, m, 2).", e)
Пример #34
0
def test_del_attributes():
    assert_true("del_attr(X, m).")
    assert_true("del_attr(a, m).")
    prolog_raises("instantiation_error", "del_attr(X, Y)")
    prolog_raises("type_error(A, B)", "del_attr(X, 1)")
    assert_false("put_attr(X, m, 1), del_attr(X, m), attvar(X).")
    assert_true("""put_attr(X, m, 1), put_attr(X, m2, 2), 
                    del_attr(X, m), attvar(X).""")
    assert_true("put_attr(X, m, 1), (del_attr(X, m), fail; true), get_attr(X, m, 1).")
    assert_true("put_attr(X, m, 1), (del_attr(X, m), fail; attvar(X)).")
Пример #35
0
def test_4_queens():
    e = get_engine("""
    queens(Vars) :-
        Vars = [_A, _B, _C, _D],
        safe(Vars),
        perm([1,2,3,4], Vars).

    safe([]).
    safe([H|T]) :-
        safe(T),
        attack(H, 1, T).

    attack(_, _, []).
    attack(X, N, [H|T]) :-
        when((nonvar(X), nonvar(H)), (not(X is H + N; X is H - N))),
        N1 is N + 1,
        attack(X, N1, T).

    perm([1,2,3,4], [1,2,3,4]).
    perm([1,2,3,4], [1,2,4,3]).
    perm([1,2,3,4], [1,3,2,4]).
    perm([1,2,3,4], [1,3,4,2]).
    perm([1,2,3,4], [1,4,2,3]).
    perm([1,2,3,4], [1,4,3,2]).

    perm([1,2,3,4], [2,1,3,4]).
    perm([1,2,3,4], [2,1,4,3]).
    perm([1,2,3,4], [2,3,1,4]).
    perm([1,2,3,4], [2,3,4,1]).
    perm([1,2,3,4], [2,4,1,3]).
    perm([1,2,3,4], [2,4,2,1]).

    perm([1,2,3,4], [3,1,2,4]).
    perm([1,2,3,4], [3,1,4,2]).
    perm([1,2,3,4], [3,2,1,4]).
    perm([1,2,3,4], [3,2,4,1]).
    perm([1,2,3,4], [3,4,1,2]).
    perm([1,2,3,4], [3,4,2,1]).

    perm([1,2,3,4], [4,1,3,2]).
    perm([1,2,3,4], [4,1,2,3]).
    perm([1,2,3,4], [4,2,1,3]).
    perm([1,2,3,4], [4,2,3,1]).
    perm([1,2,3,4], [4,3,1,2]).
    perm([1,2,3,4], [4,3,2,1]).
    """,
    load_system=True)

    assert_true("queens([2, 4, 1, 3]).", e)
    assert_true("queens([3, 1, 4, 2]).", e)
    assert_false("queens([4, 2, 1, 3]).", e)
    assert_true("queens(X), X == [2, 4, 1, 3].", e)
    assert_true("queens(X), X == [3, 1, 4, 2].", e)
    assert_false("queens(X), X == [4, 2, 1, 3].", e)
    assert_true("findall(X, queens(X), L), L == [[2, 4, 1, 3], [3, 1, 4, 2]].", e)
Пример #36
0
def test_del_attrs():
    assert_true("del_attrs(1).")
    assert_true("del_attrs(a).")
    assert_true("\+ attvar(X), del_attrs(X).")
    assert_false("put_attr(X, m, 1), del_attrs(X), get_attr(X, m, 1).")
    assert_true("put_attr(X, m, 1), del_attrs(X), \+ attvar(X).")
    assert_true("put_attr(X, m, 1), del_attrs(X), del_attrs(X).")
    assert_true(
        "put_attr(X, m, 1), (del_attrs(X), fail; true), get_attr(X, m, 1).")
    assert_true(
        "put_attr(X, m, 1), put_attr(X, m, 2), del_attrs(X), \+ attvar(X).")
Пример #37
0
def test_del_attributes():
    assert_true("del_attr(X, m).")
    assert_true("del_attr(a, m).")
    prolog_raises("instantiation_error", "del_attr(X, Y)")
    prolog_raises("type_error(A, B)", "del_attr(X, 1)")
    assert_false("put_attr(X, m, 1), del_attr(X, m), attvar(X).")
    assert_true("""put_attr(X, m, 1), put_attr(X, m2, 2), 
                    del_attr(X, m), attvar(X).""")
    assert_true(
        "put_attr(X, m, 1), (del_attr(X, m), fail; true), get_attr(X, m, 1).")
    assert_true("put_attr(X, m, 1), (del_attr(X, m), fail; attvar(X)).")
Пример #38
0
def test_unifiable():
    assert_false("unifiable(a, b, _).", e)
    assert_true("unifiable(a, a, X), X == [].", e)
    assert_true("unifiable(X, X, L), L == [].", e)
    assert_true("unifiable(X, Y, L), L == [X-Y].", e)
    assert_true("unifiable(f(a), f(a), L), L == [].", e)
    assert_true("unifiable([A, B, C], T, X), X == [T-[A, B, C]].", e)
    assert_true("unifiable([A, B, C], [S|T], X), X == [T-[B, C], A-S].", e)
    assert_true("unifiable(f(a, b, T), X, L), L == [X-f(a, b, T)].", e)
    assert_true("unifiable(f(g(t(Z)), b, x(y(a))), f(g(Q), b, x(y(A))), L), L == [A-a, Q-t(Z)].", e)
    assert_true("unifiable([X1, X2, X3], [Y1, Y2, Y3], L), L == [X3-Y3, X2-Y2, X1-Y1].", e)
Пример #39
0
def test_when_ground():
    assert_true("when(ground(f(X, Y)), Z = 1), X = 1, var(Z), Y = a, Z == 1.",
                e)
    assert_true("when(ground(f(X, Y)), Z = 1), Y = 1, var(Z), X = a, Z == 1.",
                e)
    assert_false("when(ground(f(X, Y)), Z = 1), X = 1, Z == 1.", e)
    assert_true(
        "when((ground(X), ground(Y)), Z = 1), X = a, var(Z), Y = b, Z == 1.",
        e)
    assert_true(
        "when((ground(X), ground(Y)), Z = 1), Y = a, var(Z), X = b, Z == 1.",
        e)
    assert_true("when((ground(a), ground(Y)), Z = 1), var(Z), Y = a, Z == 1.",
                e)
    assert_true("when((ground(X), ground(a)), Z = 1), var(Z), X = a, Z == 1.",
                e)
    assert_true("when((ground(a), ground(a)), Z = 1), Z == 1.", e)
    assert_true("when((ground(X); ground(Y)), Z = 1), var(Z), Y = b, Z == 1.",
                e)
    assert_true("when((ground(X); ground(Y)), Z = 1), var(Z), X = b, Z == 1.",
                e)
    assert_true(
        "when((ground(X); ground(Y)), Z = 1), var(Z), Y = b, Z == 1, X = a.",
        e)
    assert_true(
        "when((ground(X); ground(Y)), test_once(Z)), var(Z), Y = b, Z == 1, X = a.",
        e)
    assert_true("when(ground(1), m:g(q)).", e)
    assert_true("when(ground(X), Y = 1), X = a, Y == 1.", e)
    assert_true(
        "when(ground(X), Y = 1), when(ground(X), Z = 2), X = a, Y == 1, Z == 2.",
        e)
    assert_true(
        "when(ground(X), Y), when(ground(A), Y = (B = 3)), A = a, X = q, Y == (3 = 3).",
        e)
    assert_true(
        "when(ground(f(X, Y)), when(ground(X), Z = 1)), X = a, var(Z), Y = b, Z == 1.",
        e)
    assert_true(
        "when(ground(f(X, Y)), when(ground(A), Z = 1)), X = a, var(Z), Y = b, var(Z), A = 1, Z == 1.",
        e)

    assert_true(
        "when(ground(X), A = 1), when(ground(Y), B = 2), X = Y, var(A), var(B), X = a, A == 1, B == 2.",
        e)
    assert_true(
        "when(ground(X), A = 1), when(ground(Y), B = 2), Y = X, var(A), var(B), X = a, A == 1, B == 2.",
        e)
    assert_true(
        "when(ground(X), A = 1), when(ground(Y), B = 2), X = Y, var(A), var(B), Y = a, A == 1, B == 2.",
        e)
    assert_true(
        "when(ground(X), A = 1), when(ground(Y), B = 2), Y = X, var(A), var(B), Y = a, A == 1, B == 2.",
        e)
Пример #40
0
def test_frozen():
    assert_false("frozen(a, a).", e)
    assert_true("frozen(1, X), X == true.", e)
    assert_true("frozen(X, X), X == true.", e)
    assert_true("frozen(X, Y), Y == true, var(X).", e)
    assert_true("freeze(X, f(a)), frozen(X, user:f(a)).", e)
    assert_true("freeze(X, m:g(q)), frozen(X, R), R == m:g(q).", e)
    assert_true(
        "freeze(X, true), frozen(X, user:true), freeze(X, fail), frozen(X, (user:true, user:fail)).",
        e)
    assert_true("freeze(X, true), X = a, frozen(X, R), R == true.", e)
Пример #41
0
def test_retract_rule_from_other_module():
    e = get_engine("""
    :- use_module(m).
    """,
                   m="""
    :- module(m, []).
    a.
    """)
    assert_false("retract(a).", e)
    assert_true("m:retract(a).", e)
    assert_false("m:retract(a).", e)
Пример #42
0
def test_retract_rule_from_other_module():
    e = get_engine("""
    :- use_module(m).
    """,
    m = """
    :- module(m, []).
    a.
    """)
    assert_false("retract(a).", e)
    assert_true("m:retract(a).", e)
    assert_false("m:retract(a).", e)
Пример #43
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"
Пример #44
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"
Пример #45
0
def test_term_attvars_fail_fast():
    py.test.skip("")
    e = get_engine("""
    f(1, [X]) :-
        put_attr(X, m, 1).
    f(N, [X|R]) :-
        N >= 1,
        put_attr(X, m, 1),
        N1 is N - 1,
        f(N1, R).
    """)
    assert_false("f(10000, L), term_attvars(L, []).", e)
Пример #46
0
def test_attr_unify_hook_choice():
    e = get_engine("",
                   m="""
    :- module(m, []).
    
    attr_unify_hook(Attr, f(Value)) :-
        Value = a; Value = b.
    """)
    assert_false("put_attr(X, m, 1), X = c.", e)
    assert_false("put_attr(X, m, 1), X = f(c).", e)
    assert_true("put_attr(X, m, 1), X = f(Y), Y = a.", e)
    assert_true("put_attr(X, m, 1), X = f(Y), Y = b.", e)
Пример #47
0
def test_term_attvars_fail_fast():
    py.test.skip("")
    e = get_engine("""
    f(1, [X]) :-
        put_attr(X, m, 1).
    f(N, [X|R]) :-
        N >= 1,
        put_attr(X, m, 1),
        N1 is N - 1,
        f(N1, R).
    """)
    assert_false("f(10000, L), term_attvars(L, []).", e)
Пример #48
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)
Пример #49
0
def test_attr_unify_hook_choice():
    e = get_engine("",
    m = """
    :- module(m, []).
    
    attr_unify_hook(Attr, f(Value)) :-
        Value = a; Value = b.
    """)
    assert_false("put_attr(X, m, 1), X = c.", e)
    assert_false("put_attr(X, m, 1), X = f(c).", e)
    assert_true("put_attr(X, m, 1), X = f(Y), Y = a.", e)
    assert_true("put_attr(X, m, 1), X = f(Y), Y = b.", e)
Пример #50
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)
Пример #51
0
def test_retract_other_module():
    e = get_engine("", m="""
    :- module(m, []).
    f(a).
    f(b).
    """)
    assert_true("m:f(a), m:f(b).", e)
    assert_true("retract(m:f(a)).", e)
    assert_false("retract(m:f(a)).", e)
    assert_false("m:f(a).", e)
    assert_true("m:f(b).", e)
    assert_true("retract(m:f(b)).", e)
    prolog_raises("existence_error(_, _)", "f(b)", e)
Пример #52
0
def xtest_get_attrs():
    assert_false("get_attrs(X, Y).")
    assert_false("get_attrs(a, Y).")
    assert_false("get_attrs(1, Y).")
    assert_true("put_attr(X, m, 1), get_attrs(X, att(m, 1, [])).")
    assert_false("put_attr(X, m, 1), get_attrs(f(X), att(m, 1, [])).")
    assert_true(
        "put_attr(X, m, 1), put_attr(X, a, 2), get_attrs(X, att(m, 1, att(a, 2, [])))."
    )
    assert_false("(put_attr(X, m, 1), fail; true), get_attrs(X, L).")
    assert_true(
        "put_attr(X, m, 1), put_attr(Y, m, X), get_attrs(Y, att(m, X, [])), get_attrs(X, att(m, 1, []))."
    )
Пример #53
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))")
Пример #54
0
def test_backtracking():
    assert_false("(put_attr(X, m, 1), fail); attvar(X).")
    assert_false(
        "put_attr(X, m, 2), (put_attr(X, m, 1), fail); get_attr(X, m, 2).")
    assert_true("(put_attr(X, b, 1), fail); \+ get_attr(X, b, 1).")
    assert_true(
        "put_attr(X, a, 2), ((put_attr(X, b, 1), fail); get_attr(X, a, 2)), \+ get_attr(X, b, 1)."
    )
    assert_true(
        "put_attr(X, a, 2), ((put_attr(X, a, 1), put_attr(X, a, 3), fail); get_attr(X, a, 2))."
    )
    assert_true(
        "put_attr(X, a, 2), ((put_attr(X, b, 1), put_attr(X, c, 3), fail); get_attr(X, a, 2)), \+ get_attr(X, b, 1), \+ get_attr(X, c, 3)."
    )
Пример #55
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))")
Пример #56
0
def test_retract_other_module():
    e = get_engine("",
    m = """
    :- module(m, []).
    f(a).
    f(b).
    """)
    assert_true("m:f(a), m:f(b).", e)
    assert_true("retract(m:f(a)).", e)
    assert_false("retract(m:f(a)).", e)
    assert_false("m:f(a).", e)
    assert_true("m:f(b).", e)
    assert_true("retract(m:f(b)).", e)
    prolog_raises("existence_error(_, _)", "f(b)", e)
Пример #57
0
def test_not_with_cut():
    assert_true("not((!, fail)).")
    assert_false("not(!).")

    e = get_engine("""
    p1 :- \\+ q1.
    q1 :- fail.
    q1 :- true.
    
    p2:- \\+ q2.
    q2 :- !, fail.
    q2 :- true.
    """)
    assert_false("p1.", e)
    assert_true("p2.", e)
Пример #58
0
def test_unifiable():
    assert_false("unifiable(a, b, _).", e)
    assert_true("unifiable(a, a, X), X == [].", e)
    assert_true("unifiable(X, X, L), L == [].", e)
    assert_true("unifiable(X, Y, L), L == [X-Y].", e)
    assert_true("unifiable(f(a), f(a), L), L == [].", e)
    assert_true("unifiable([A, B, C], T, X), X == [T-[A, B, C]].", e)
    assert_true("unifiable([A, B, C], [S|T], X), X == [T-[B, C], A-S].", e)
    assert_true("unifiable(f(a, b, T), X, L), L == [X-f(a, b, T)].", e)
    assert_true(
        "unifiable(f(g(t(Z)), b, x(y(a))), f(g(Q), b, x(y(A))), L), L == [A-a, Q-t(Z)].",
        e)
    assert_true(
        "unifiable([X1, X2, X3], [Y1, Y2, Y3], L), L == [X3-Y3, X2-Y2, X1-Y1].",
        e)