Beispiel #1
0
def test_library_usage():
    tempdir = "__tempdir__"
    mod = "m"
    mod2 = "m2"

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

    create_file(tempdir + "/" + (mod2 + ".pl"), """
    :- module(m2, [f/1]).
    f(a).
    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)

        e = get_engine(":- add_library_dir('%s')." % tempdir)
        assert len(e.modulewrapper.libs) == 1
        assert_true("use_module(library('%s'))." % mod2, e)
        assert_true("f(a).", e)
        prolog_raises("existence_error(X, Y)", "g", e)
    finally:
        delete_dir(tempdir)
Beispiel #2
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 #3
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 #4
0
def test_library_usage():
    tempdir = "__tempdir__"
    mod = "m"
    mod2 = "m2"

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

    create_file(tempdir + "/" + (mod2 + ".pl"), """
    :- module(m2, [f/1]).
    f(a).
    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)

        e = get_engine(":- add_library_dir('%s')." % tempdir)
        assert len(e.modulewrapper.libs) == 1
        assert_true("use_module(library('%s'))." % mod2, e)
        assert_true("f(a).", e)
        prolog_raises("existence_error(X, Y)", "g", e)
    finally:
        delete_dir(tempdir)
Beispiel #5
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 #6
0
def test_module_exports():
    e = get_engine("""
    :- module(m, [g/2]).
    g(a, b).
    f(c, d, e).
    """)
    exports = e.modulewrapper.modules["m"].exports
    assert len(exports) == 1 and exports[0].eq(Signature("g", 2))
Beispiel #7
0
def test_module_exports():
    e = get_engine("""
    :- module(m, [g/2]).
    g(a, b).
    f(c, d, e).
    """)
    exports = e.modulewrapper.modules["m"].exports
    assert len(exports) == 1 and exports[0].eq(Signature("g", 2))
Beispiel #8
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)
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 #10
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 #11
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 #12
0
def test_switch_to_nonexistent_module():
    e = get_engine("""
    :- module(m).
    """)
    prolog_raises("existence_error(X, Y)", "x", e)
    assert_true("assert(x).", e)
    assert_true("x.", e)
    assert_true("module(user).", e)
    prolog_raises("existence_error(X, Y)", "x", e)
Beispiel #13
0
def test_switch_to_nonexistent_module():
    e = get_engine("""
    :- module(m).
    """)
    prolog_raises("existence_error(X, Y)", "x", e)
    assert_true("assert(x).", e)
    assert_true("x.", e)
    assert_true("module(user).", e)
    prolog_raises("existence_error(X, Y)", "x", e)
Beispiel #14
0
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 #15
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 #16
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 #17
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 #18
0
def test_overwrite_term_expand():
    e = get_engine("""
    term_expand(A, A).
    a --> [b].
    """,
                   load_system=True)
    assert_true("(X --> Y), X == a, Y == [b].", e)
    assert_true("system:term_expand((a --> [b]), R), assert(R).", e)
    assert_true("a([b], []).", e)
    assert_true("term_expand((a --> b), R), assert(R).", e)
    assert_true("(A --> b), A == a.", e)
Beispiel #19
0
def test_catch_error():
    e = get_engine("""
    :- use_module(m).
    h :- catch(f, X, g).
    g.
    """,
                   m="""
    :- module(m, [f/0]).
    f :- throw(foo).
    """)
    assert_true("h.", e)
Beispiel #20
0
def test_file_parsing():
    e = get_engine("""
    :- use_module(m).
    :- use_module(m).
    """,
    create_files=True,
    m = """
    :- module(m, []).
    :- assert(user:f(a)).
    """)
    assert_true("findall(X, f(X), [a]).", e)
Beispiel #21
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 #22
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)
Beispiel #23
0
def test_catch_error():
    e = get_engine("""
    :- use_module(m).
    h :- catch(f, X, g).
    g.
    """,
    m = """
    :- module(m, [f/0]).
    f :- throw(foo).
    """)
    assert_true("h.", e)
Beispiel #24
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)
Beispiel #25
0
def test_file_parsing():
    e = get_engine("""
    :- use_module(m).
    :- use_module(m).
    """,
                   create_files=True,
                   m="""
    :- module(m, []).
    :- assert(user:f(a)).
    """)
    assert_true("findall(X, f(X), [a]).", e)
Beispiel #26
0
def test_overwrite_term_expand():
    e = get_engine("""
    term_expand(A, A).
    a --> [b].
    """,
    load_system=True)
    assert_true("(X --> Y), X == a, Y == [b].", e)
    assert_true("system:term_expand((a --> [b]), R), assert(R).", e)
    assert_true("a([b], []).", e)
    assert_true("term_expand((a --> b), R), assert(R).", e)
    assert_true("(A --> b), A == a.", e)
Beispiel #27
0
def test_nonexisting_predicates_in_import_list():
    e = get_engine("""
    :- use_module(m, [z/0, g/1]).
    """,
                   m="""
    :- module(m, [f/1, g/0]).
    f(a).
    g.
    q.
    """)
    prolog_raises("existence_error(X, Y)", "z", e)
    prolog_raises("existence_error(X, Y)", "g(A)", e)
Beispiel #28
0
def test_once():
    e = get_engine("""
    :- use_module(m).
    x :- f, h.
    h.
    """,
    m = """
    :- module(m, [f/0]).
    f :- once(g).
    g.
    """)
    assert_true("x.", e)
Beispiel #29
0
def test_nonexisting_predicates_in_import_list():
    e = get_engine("""
    :- use_module(m, [z/0, g/1]).
    """,
    m = """
    :- module(m, [f/1, g/0]).
    f(a).
    g.
    q.
    """)
    prolog_raises("existence_error(X, Y)", "z", e)
    prolog_raises("existence_error(X, Y)", "g(A)", e)
Beispiel #30
0
def test_discard_useless_env_suffix():
    e = get_engine("""
        f(h(A), A, B, C) :- g(B), h(D), h1(D), h(E).
    """)
    # classes of variables:
    # just in head: A    (needs index at the end of env)
    # both: B            (needs index at the beginning of env)
    # singletons head: C (-1)
    # singletons body: E (-1, XXX currently not optimized)
    # just in body: D    (needs index at end of env, appended after matching head)
    func = e.modulewrapper.current_module.lookup(Signature.getsignature(
        "f", 4))
Beispiel #31
0
def test_once():
    e = get_engine("""
    :- use_module(m).
    x :- f, h.
    h.
    """,
                   m="""
    :- module(m, [f/0]).
    f :- once(g).
    g.
    """)
    assert_true("x.", e)
Beispiel #32
0
def test_import_list_simple():
    e = get_engine("""
    :- use_module(m, [f/1, g/0]).
    h(X) :- f(X), g.
    """,
    m = """
    :- module(m, [f/1, g/0]).
    f(a).
    g.
    q.
    """)
    assert_true("h(a).", e)
    prolog_raises("existence_error(X, Y)", "q", e)
Beispiel #33
0
def test_module_switch_1():
    e = get_engine("""
    :- use_module(m).
    :- module(m).
    """,
                   m="""
    :- module(m, [g/0]).
    g.
    f.
    """)
    assert e.modulewrapper.current_module.name == "m"
    assert_true("g.", e)
    assert_true("f.", e)
Beispiel #34
0
def test_assert_rule_into_other_module_2():
    e = get_engine("""
    :- use_module(m).
    """,
    m = """
    :- module(m, [f/1]).

    f(Rule) :-
        assert(Rule).
    """)
    assert_true("f(g(a)).", e)
    prolog_raises("existence_error(_, _)", "g(a)", e)
    assert_true("m:g(a).", e)
Beispiel #35
0
def test_module_switch_1():
    e = get_engine("""
    :- use_module(m).
    :- module(m).
    """,
    m = """
    :- module(m, [g/0]).
    g.
    f.
    """)
    assert e.modulewrapper.current_module.name == "m"
    assert_true("g.", e)
    assert_true("f.", e)
Beispiel #36
0
def test_append_nondeterministic():
    e = get_engine("""
        make_list(A, B) :- make_list(A, [], B).
        make_list(X, In, Out) :-
            X > 0,
            X0 is X - 1,
            make_list(X0, [X|In], Out).
        make_list(0, In, In).
    """,
                   load_system=True)
    assert_true(
        "Len = 400, Len0 is Len - 5, make_list(Len, L), append(L1, _, L), length(L1, Len0).",
        e)
Beispiel #37
0
def test_assert_rule_into_other_module_2():
    e = get_engine("""
    :- use_module(m).
    """,
                   m="""
    :- module(m, [f/1]).

    f(Rule) :-
        assert(Rule).
    """)
    assert_true("f(g(a)).", e)
    prolog_raises("existence_error(_, _)", "g(a)", e)
    assert_true("m:g(a).", e)
Beispiel #38
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)
Beispiel #39
0
def test_import_list_simple():
    e = get_engine("""
    :- use_module(m, [f/1, g/0]).
    h(X) :- f(X), g.
    """,
                   m="""
    :- module(m, [f/1, g/0]).
    f(a).
    g.
    q.
    """)
    assert_true("h(a).", e)
    prolog_raises("existence_error(X, Y)", "q", e)
Beispiel #40
0
def test_empty_import_list():
    e = get_engine("""
    :- use_module(m, []).
    """,
    m = """
    :- module(m, [f/1, g/0]).
    f(a).
    g.
    q.
    """)
    assert len(e.modulewrapper.modules["user"].functions) == 0
    prolog_raises("existence_error(X, Y)", "f(a)", e)
    prolog_raises("existence_error(X, Y)", "g", e)
    prolog_raises("existence_error(X, Y)", "q", e)
Beispiel #41
0
def test_assert_rule_into_other_module():
    e = get_engine("""
    :- use_module(m).
    """,
                   m="""
    :- module(m, []).
    """)
    assert_true("m:assert(a).", e)
    assert_true("m:a.", e)
    prolog_raises("existence_error(_, _)", "a", e)

    assert_true("m:assert(user:b).", e)
    assert_true("b.", e)
    prolog_raises("existence_error(_, _)", "m:b", e)
Beispiel #42
0
def test_fail_and_retry_in_different_modules():
    e = get_engine("""
    :- use_module(m1).
    :- use_module(m2).
    """,
                   m1="""
    :- module(m1, [f/1]).
    f(a).
    """,
                   m2="""
    :- module(m2, [g/1]).
    g(a).
    """)
    assert_true(";((f(a), fail), g(a)).", e)
Beispiel #43
0
def test_set_currently_parsed_module():
    e = get_engine("""
    f(a).
    """)
    m = e.modulewrapper
    assert m.current_module == m.user_module
    m.add_module("m1", [])
    assert "m1" in m.modules
    mod1 = m.modules["m1"]
    assert mod1.exports == []
    assert mod1.functions == {}
    atom = term.Callable.build("f")
    e.add_rule(atom)
    assert atom.signature() in mod1.functions
Beispiel #44
0
def test_empty_import_list():
    e = get_engine("""
    :- use_module(m, []).
    """,
                   m="""
    :- module(m, [f/1, g/0]).
    f(a).
    g.
    q.
    """)
    assert len(e.modulewrapper.modules["user"].functions) == 0
    prolog_raises("existence_error(X, Y)", "f(a)", e)
    prolog_raises("existence_error(X, Y)", "g", e)
    prolog_raises("existence_error(X, Y)", "q", e)
Beispiel #45
0
def test_fail_and_retry_in_different_modules():
    e = get_engine("""
    :- use_module(m1).
    :- use_module(m2).
    """, 
    m1 = """
    :- module(m1, [f/1]).
    f(a).
    """, 
    m2 = """
    :- module(m2, [g/1]).
    g(a).
    """)
    assert_true(";((f(a), fail), g(a)).", e)
Beispiel #46
0
def test_assert_rule_into_other_module():
    e = get_engine("""
    :- use_module(m).
    """,
    m = """
    :- module(m, []).
    """)
    assert_true("m:assert(a).", e)
    assert_true("m:a.", e)
    prolog_raises("existence_error(_, _)", "a", e)

    assert_true("m:assert(user:b).", e)
    assert_true("b.", e)
    prolog_raises("existence_error(_, _)", "m:b", e)
Beispiel #47
0
def test_set_currently_parsed_module():
    e = get_engine("""
    f(a).
    """)
    m = e.modulewrapper
    assert m.current_module == m.user_module
    m.add_module("m1", [])
    assert "m1" in m.modules
    mod1 = m.modules["m1"]
    assert mod1.exports == []
    assert mod1.functions == {}
    atom = term.Callable.build("f")
    e.add_rule(atom)
    assert atom.signature() in mod1.functions
Beispiel #48
0
def test_source_range():
    e = get_engine("""
f(a) :- a.
f(b) :-
    b.
a.
b.
""")
    func = e.modulewrapper.current_module.lookup(Signature.getsignature("f", 1))
    assert func.rulechain.line_range == [1, 2]
    assert func.rulechain.next.line_range == [2, 4]
    assert func.rulechain.file_name == "<unknown>"
    assert func.rulechain.source == "f(a) :- a."
    assert func.rulechain.next.source == "f(b) :-\n    b."
Beispiel #49
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)
Beispiel #50
0
def test_source_range():
    e = get_engine("""
f(a) :- a.
f(b) :-
    b.
a.
b.
""")
    func = e.modulewrapper.current_module.lookup(Signature.getsignature(
        "f", 1))
    assert func.rulechain.line_range == [1, 2]
    assert func.rulechain.next.line_range == [2, 4]
    assert func.rulechain.file_name == "<unknown>"
    assert func.rulechain.source == "f(a) :- a."
    assert func.rulechain.next.source == "f(b) :-\n    b."
Beispiel #51
0
def test_module_prefixing():
    e = get_engine("""
    a.
    """,
                   m="""
    :- module(m, []).
    f(a).
    f(b).
    """)
    assert_true("m:f(a), m:f(b).", e)
    assert_true("m:f(a), a.", e)
    prolog_raises("existence_error(X, Y)", "m:a", e)
    assert_true("module(m).", e)
    prolog_raises("existence_error(X, Y)", "a", e)
    assert_true("user:a.", e)
Beispiel #52
0
def test_recursive_use_module():
    # if this test fails, one will recognize it by
    # waiting very long ...
    mod = "m"
    create_file(mod, """
    :- module(m, []).
    :- use_module(m).
    """)

    try:
        e = get_engine("""
        :- use_module(m).
        """)
    finally:
        delete_file(mod)
Beispiel #53
0
def test_module_uses():
    e = get_engine("""
    :- use_module(b).
    """,
                   a="""
    :- module(a, [h/1]).
    h(z).
    """,
                   b="""
    :- module(b, [f/1]).
    :- use_module(a).
    f(X) :- h(X).
    g(a).
    """)
    assert len(e.modulewrapper.modules) == 3
Beispiel #54
0
def test_abolish_other_module():
    e = get_engine("",
                   m="""
    :- module(m, []).
    f(a).
    f(b).
    g(c).
    """)
    assert_true("m:f(a), m:f(b), m:g(c).", e)
    assert_true("abolish(m:f/1).", e)
    prolog_raises("existence_error(_, _)", "m:f(X)", e)
    assert_true("m:g(c).", e)
    assert_true("abolish(m:g/1).", e)
    prolog_raises("existence_error(_, _)", "m:g(c)", e)
    assert_true("abolish(m:g/1).", e)
Beispiel #55
0
def test_modules_integration():
    e = get_engine("""
    :- use_module(m).
    f(X) :- g(X).
    h(b).
    both(X, Y) :- f(X), h(Y).
    """,
    m = """
    :- module(m, [g/1]).
    g(X) :- h(X).
    h(a).
    """)

    assert_true("findall(X, h(X), L), L = [b].", e)
    assert_true("both(X, Y), X == a, Y == b.", e)
Beispiel #56
0
def test_if():
    e = get_engine("""
    :- use_module(m).
    f(X) :- (X = b
        -> g(X)
        ; h(X)).
    g(c).
    """,
    m = """
    :- module(m, [h/1]).
    h(a).
    """)

    assert_true("f(a).", e)
    assert_false("f(b).", e)
Beispiel #57
0
def test_module_prefixing():
    e = get_engine("""
    a.
    """,
    m = """
    :- module(m, []).
    f(a).
    f(b).
    """)
    assert_true("m:f(a), m:f(b).", e)
    assert_true("m:f(a), a.", e)
    prolog_raises("existence_error(X, Y)", "m:a", e)
    assert_true("module(m).", e)
    prolog_raises("existence_error(X, Y)", "a", e)
    assert_true("user:a.", e)
Beispiel #58
0
def test_abolish_other_module():
    e = get_engine("",
    m = """
    :- module(m, []).
    f(a).
    f(b).
    g(c).
    """)
    assert_true("m:f(a), m:f(b), m:g(c).", e)
    assert_true("abolish(m:f/1).", e)
    prolog_raises("existence_error(_, _)", "m:f(X)", e)
    assert_true("m:g(c).", e)
    assert_true("abolish(m:g/1).", e)
    prolog_raises("existence_error(_, _)", "m:g(c)", e)
    assert_true("abolish(m:g/1).", e)
Beispiel #59
0
def test_recursive_use_module():
    # if this test fails, one will recognize it by
    # waiting very long ...
    mod = "m"
    create_file(mod, """
    :- module(m, []).
    :- use_module(m).
    """)

    try:
        e = get_engine("""
        :- use_module(m).
        """)
    finally:
        delete_file(mod)
Beispiel #60
0
def test_module_uses():
    e = get_engine("""
    :- use_module(b).
    """,
    a = """
    :- module(a, [h/1]).
    h(z).
    """,
    b = """
    :- module(b, [f/1]).
    :- use_module(a).
    f(X) :- h(X).
    g(a).
    """)
    assert len(e.modulewrapper.modules) == 3