Beispiel #1
0
def test_once_other_module():
    e = get_engine("", m="""
    :- module(m, []).
    f(a).
    """)
    assert_true("once(m:f(X)), X = a.", e)
    prolog_raises("existence_error(_, _)", "f(X)", e)
Beispiel #2
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)
Beispiel #3
0
def test_statistics_runtime_since_last_call():
    e.clocks.startup()
    # succesive call return total runtime and time since last call
    vars1 = assert_true("statistics(runtime, _), statistics(runtime, [A,B]).", e)
    vars2 = assert_true("statistics(runtime, _), statistics(runtime, [A,B]).", e)
    assert vars2['A'].num != vars2['B'].num
    assert vars1['A'].num <= vars2['A'].num
Beispiel #4
0
def test_library_load_priority():
    tempdir = "__tempdir__"
    mod = "m"

    create_dir(tempdir)
    create_file(tempdir + "/" + mod, """
    :- module(m, [f/1]).
    f(a).
    g.
    """)

    create_file(mod, """
    :- module(m, [f/1, g]).
    f(b).
    g.
    """)

    try:
        e = get_engine(":- add_library_dir('%s')." % tempdir)
        assert len(e.modulewrapper.libs) == 1
        assert_true("use_module(library('%s'))." % mod, e)
        assert_true("f(a).", e)
        prolog_raises("existence_error(X, Y)", "g", e)
    finally:
        delete_dir(tempdir)
        delete_file(mod)
Beispiel #5
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)
Beispiel #6
0
def test_importlist_intersection():
    e = get_engine("""
    :- use_module(m, []).
    """,
                   m="""
    :- module(m, [f/1]).
    f(a).
    g(a).
    """)
    prolog_raises("existence_error(procedure, '/'('f', 1))", "f(a)", e)
    prolog_raises("existence_error(procedure, '/'('g', 1))", "g(a)", e)

    e = get_engine("""
    :- use_module(m, [g/1]).
    """,
                   m="""
    :- module(m, [f/1]).
    f(a).
    g(a).
    """)
    prolog_raises("existence_error(procedure, '/'('f', 1))", "f(a)", e)
    prolog_raises("existence_error(procedure, '/'('g', 1))", "g(a)", e)

    e = get_engine("""
    :- use_module(m, [f/1, g/1]).
    """,
                   m="""
    :- module(m, [f/1]).
    f(a).
    g(a).
    """)
    assert_true("f(a).", e)
    prolog_raises("existence_error(procedure, '/'('g', 1))", "g(a)", e)
Beispiel #7
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."
    )
Beispiel #8
0
def test_peek_char():
    src = "__src__"
    empty = "__empty__"
    create_file(src, "aü¼")
    create_file(empty, "")
    try:
        assert_true("""
        open('%s', read, S),
        peek_char(S, C), C = 'a',
        peek_char(S, D), D = 'a',
        get_char(S, _),
        peek_char(S, E), E = 'ü',
        peek_char(S, F), F = 'ü',
        get_char(S, _),
        peek_char(S, G), G = '¼',
        get_char(S, _),
        peek_char(S, Z), Z = end_of_file,
        close(S).
        """ % src)

        assert_true("""
        open('%s', read, S),
        peek_char(S, end_of_file),
        close(S).
        """ % empty)
    finally:
        delete_file(src)
        delete_file(empty)
Beispiel #9
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)
Beispiel #10
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)
Beispiel #11
0
def test_numbervars_simple():
    assert_true("numbervars(X, 0, 1).", e)
    assert_true("numbervars(f(X,Y), 0, 2).", e)
    assert_true("numbervars(f(X,X), 0, 1).", e)
    assert_true("numbervars(a, 0, 0).", e)
    assert_true("numbervars(0, 0, 0).", e)
    prolog_raises("type_error(_, _)", "numbervars(_, no_number, _)", e)
Beispiel #12
0
def test_library_load_priority():
    tempdir = "__tempdir__"
    mod = "m"

    create_dir(tempdir)
    create_file(tempdir + "/" + mod, """
    :- module(m, [f/1]).
    f(a).
    g.
    """)

    create_file(mod, """
    :- module(m, [f/1, g]).
    f(b).
    g.
    """)

    try:
        e = get_engine(":- add_library_dir('%s')." % tempdir)
        assert len(e.modulewrapper.libs) == 1
        assert_true("use_module(library('%s'))." % mod, e)
        assert_true("f(a).", e)
        prolog_raises("existence_error(X, Y)", "g", e)
    finally:
        delete_dir(tempdir)
        delete_file(mod)
Beispiel #13
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)
Beispiel #14
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)
Beispiel #15
0
def test_peek_byte():
    src = "__src__"
    empty = "__empty__"
    create_file(src, "\x94\xef")
    create_file(empty, "")
    try:
        assert_true("""
        open('%s', read, S),
        peek_byte(S, C), C = 148,
        peek_byte(S, D), D = 148,
        get_byte(S, _),
        peek_byte(S, E), E = 239,
        peek_byte(S, F), F = 239,
        get_byte(S, _),
        peek_byte(S, Z), Z = -1,
        close(S).
        """ % src)

        assert_true("""
        open('%s', read, S),
        peek_byte(S, -1),
        close(S).
        """ % empty)
    finally:
        delete_file(src)
        delete_file(empty)
Beispiel #16
0
def test_peek_char():
    src = "__src__"
    empty = "__empty__"
    create_file(src, "aü¼")
    create_file(empty, "")
    try:
        assert_true("""
        open('%s', read, S),
        peek_char(S, C), C = 'a',
        peek_char(S, D), D = 'a',
        get_char(S, _),
        peek_char(S, E), E = 'ü',
        peek_char(S, F), F = 'ü',
        get_char(S, _),
        peek_char(S, G), G = '¼',
        get_char(S, _),
        peek_char(S, Z), Z = end_of_file,
        close(S).
        """ % src)

        assert_true("""
        open('%s', read, S),
        peek_char(S, end_of_file),
        close(S).
        """ % empty)
    finally:
        delete_file(src)
        delete_file(empty)
Beispiel #17
0
def test_unify_explicit_alias():
    src = "__src__"
    create_file(src, "")
    try:
        assert_true("open('%s', read, S, [alias(s)]), S = s." % src)
    finally:
        delete_file(src)
Beispiel #18
0
def test_peek_code():
    src = "__src__"
    empty = "__empty__"
    create_file(src, "¼")
    create_file(empty, "")
    try:
        assert_true("""
        open('%s', read, S),
        peek_code(S, C), C = 194,
        peek_code(S, D), D = 194,
        get_code(S, _),
        peek_code(S, E), E = 188,
        get_code(S, _),
        peek_code(S, F), F = -1,
        close(S).
        """ % src)

        assert_true("""
        open('%s', read, S),
        peek_code(S, -1),
        close(S).
        """ % empty)
    finally:
        delete_file(src)
        delete_file(empty)
Beispiel #19
0
def test_unify_explicit_alias():
    src = "__src__"
    create_file(src, "")
    try:
        assert_true("open('%s', read, S, [alias(s)]), S = s." % src)
    finally:
        delete_file(src)
Beispiel #20
0
def test_importlist_intersection():
    e = get_engine("""
    :- use_module(m, []).
    """, 
    m = """
    :- module(m, [f/1]).
    f(a).
    g(a).
    """)
    prolog_raises("existence_error(procedure, '/'('f', 1))", "f(a)", e)
    prolog_raises("existence_error(procedure, '/'('g', 1))", "g(a)", e)

    e = get_engine("""
    :- use_module(m, [g/1]).
    """, 
    m = """
    :- module(m, [f/1]).
    f(a).
    g(a).
    """)
    prolog_raises("existence_error(procedure, '/'('f', 1))", "f(a)", e)
    prolog_raises("existence_error(procedure, '/'('g', 1))", "g(a)", e)

    e = get_engine("""
    :- use_module(m, [f/1, g/1]).
    """, 
    m = """
    :- module(m, [f/1]).
    f(a).
    g(a).
    """)
    assert_true("f(a).", e)
    prolog_raises("existence_error(procedure, '/'('g', 1))", "g(a)", e)
Beispiel #21
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)
Beispiel #22
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)
Beispiel #23
0
def test_peek_code():
    src = "__src__"
    empty = "__empty__"
    create_file(src, "¼")
    create_file(empty, "")
    try:
        assert_true("""
        open('%s', read, S),
        peek_code(S, C), C = 194,
        peek_code(S, D), D = 194,
        get_code(S, _),
        peek_code(S, E), E = 188,
        get_code(S, _),
        peek_code(S, F), F = -1,
        close(S).
        """ % src)

        assert_true("""
        open('%s', read, S),
        peek_code(S, -1),
        close(S).
        """ % empty)
    finally:
        delete_file(src)
        delete_file(empty)
Beispiel #24
0
def test_peek_byte():
    src = "__src__"
    empty = "__empty__"
    create_file(src, "\x94\xef")
    create_file(empty, "")
    try:
        assert_true("""
        open('%s', read, S),
        peek_byte(S, C), C = 148,
        peek_byte(S, D), D = 148,
        get_byte(S, _),
        peek_byte(S, E), E = 239,
        peek_byte(S, F), F = 239,
        get_byte(S, _),
        peek_byte(S, Z), Z = -1,
        close(S).
        """ % src)

        assert_true("""
        open('%s', read, S),
        peek_byte(S, -1),
        close(S).
        """ % empty)
    finally:
        delete_file(src)
        delete_file(empty)
Beispiel #25
0
def test_integration_1():
    assert_true(
        """
    trans((a1 --> [b], [c]), R1),
    assert(R1),
    a1([b, c], []).
    """, e)
Beispiel #26
0
def test_cut_with_throw():
    e = get_engine("""
        raise_if_var(X) :-
            var(X), !, throw(unbound).
        raise_if_var(X) :- X = a.
        c(X, Y) :- catch((raise_if_var(X), Y = b), E, Y = a).
    """)
    assert_true("c(_, Y), Y == a.", e)
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)
Beispiel #28
0
def test_integration_2():
    assert_true("""
    trans((a2 --> b2, c2, [d]), R1),
    trans((b2 --> [b]), R2),
    trans((c2 --> [c]), R3),
    assert(R1), assert(R2), assert(R3),
    a2([b, c, d], []).
    """, e)
Beispiel #29
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
Beispiel #30
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)
Beispiel #31
0
def test_statistics_walltime_progresses():
    # succesive call return total runtime and time since last call
    e.clocks.startup()
    v1 = assert_true("statistics(walltime, _), statistics(walltime, [A,B]).", e)
    time.sleep(2)
    v2 = assert_true("statistics(walltime, _), statistics(walltime, [C,D]).", e)
    assert v1['A'] != v1['B']
    assert 1000 <= v2['C'].num - v1['A'].num <= 3000
Beispiel #32
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).")
Beispiel #33
0
def test_once_other_module():
    e = get_engine("",
    m = """
    :- module(m, []).
    f(a).
    """)
    assert_true("once(m:f(X)), X = a.", e)
    prolog_raises("existence_error(_, _)", "f(X)", e)
Beispiel #34
0
def test_statistics_walltime_since_last_call():
    # succesive call return total runtime and time since last call
    e.clocks.startup()
    # first call returns total runtime in both list items
    vars1 = assert_true("statistics(walltime, _), statistics(walltime, [A,B]).", e)
    vars2 = assert_true("statistics(walltime, _), statistics(walltime, [A,B]).", e)
    assert vars2['A'].num != vars2['B'].num
    assert vars1['A'].num <= vars2['A'].num
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).")
Beispiel #36
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)
Beispiel #37
0
def test_cut_with_throw():
    e = get_engine("""
        raise_if_var(X) :-
            var(X), !, throw(unbound).
        raise_if_var(X) :- X = a.
        c(X, Y) :- catch((raise_if_var(X), Y = b), E, Y = a).
    """)
    assert_true("c(_, Y), Y == a.", e)
Beispiel #38
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)
Beispiel #39
0
def test_library_dir_single_query():
    e = Engine()
    tempdir = "__temp__"
    create_dir(tempdir)
    try:
        assert_true("add_library_dir('%s')." % tempdir, e)
        assert_true("library_directory('%s')." % tempdir, e)
    finally:
        delete_dir(tempdir)
Beispiel #40
0
def test_integration_2():
    assert_true(
        """
    trans((a2 --> b2, c2, [d]), R1),
    trans((b2 --> [b]), R2),
    trans((c2 --> [c]), R3),
    assert(R1), assert(R2), assert(R3),
    a2([b, c, d], []).
    """, e)
Beispiel #41
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.")
def test_term_variables_huge_list():
    py.test.skip("")
    e = get_engine("""
        make_triple_list(0, _, []).
        make_triple_list(X, Y, [Y, Y, Y | T]) :-
            X > 0, X1 is X - 1,
            make_triple_list(X1, Y, T).
            """)
    assert_true("make_triple_list(4000, a, L), term_variables(L, L1), L1 == [].", e)
Beispiel #43
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
Beispiel #44
0
def test_term_expand_fail():
    # Since self-defined term_expand fails
    # the system term_expand should be called.
    e = get_engine("""
    term_expand(A, A) :- fail.
    a --> [b].
    """,
                   load_system=True)
    assert_true("a([b], []).", e)
Beispiel #45
0
def test_library_dir_single_query():
    e = Engine()
    tempdir = "__temp__"
    create_dir(tempdir)
    try:
        assert_true("add_library_dir('%s')." % tempdir, e)
        assert_true("library_directory('%s')." % tempdir, e)
    finally:
        delete_dir(tempdir)
Beispiel #46
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.")
Beispiel #47
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
Beispiel #48
0
def test_term_expand_fail():
    # Since self-defined term_expand fails
    # the system term_expand should be called.
    e = get_engine("""
    term_expand(A, A) :- fail.
    a --> [b].
    """,
    load_system=True)
    assert_true("a([b], []).", e)
Beispiel #49
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)
Beispiel #50
0
def test_see_with_file():
    src = "__src__"
    create_file(src, "abc")
    try:
        assert_true("""
        see('%s'),
        get_char(a), get_char(b), get_char(c).
        """ % src)
    finally:
        delete_file(src)
Beispiel #51
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
Beispiel #52
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)
Beispiel #53
0
def test_abolish_from_other_module():
    e = get_engine("""
    :- use_module(m).
    """,
    m = """
    :- module(m, []).
    a.
    """)
    assert_true("m:abolish(a/0).", e)
    prolog_raises("existence_error(_, _)", "m:a", e)
Beispiel #54
0
def test_see_with_file():
    src = "__src__"
    create_file(src, "abc")
    try:
        assert_true("""
        see('%s'),
        get_char(a), get_char(b), get_char(c).
        """ % src)
    finally:
        delete_file(src)
Beispiel #55
0
def test_use_module_with_file():
    e = get_engine("""
    :- use_module(m).
    """, True,
    m = """
    :- module(m, [f/0]).
    f.
    """)
    assert len(e.modulewrapper.modules) == 2
    assert_true("f.", e)
Beispiel #56
0
def test_asserta_other_module():
    e = Engine()
    assert_true("asserta(m:f(a)).", e)
    assert len(e.modulewrapper.modules) == 2
    assert_true("m:f(a).", e)
    prolog_raises("existence_error(_, _)", "f(a)", e)
    assert_true("module(m).", e)
    assert_true("f(a).", e)
    assert_true("module(user).", e)
    prolog_raises("existence_error(_, _)", "f(a)", e)