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))")
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))")
def test_or(): e = get_engine(""" g(a, b). g(b, a). f(X, Y) :- g(X, b); g(a, Y). """) e.run(parse_query_term("f(a, c).")) e.run(parse_query_term("f(d, b).")) prolog_raises("ERROR", "foo(X); X = 1")
def test_or(): e = get_engine(""" g(a, b). g(b, a). f(X, Y) :- g(X, b); g(a, Y). """) e.run(parse_query_term("f(a, c).")) e.run(parse_query_term("f(d, b).")) prolog_raises("ERROR", "foo(X); X = 1")
def test_error_unknown_function(): e = get_engine(""" g(a). f(X) :- g(X), h(X). """) prolog_raises("existence_error(procedure, h/1)", "f(X)", e)
def test_and(): assert_false("fail, X.") prolog_raises("type_error(callable, 1)", "(fail, 1)")
def test_write_term(): prolog_raises("domain_error(write_option, E)", "write_term(a, [quoted(af)])") prolog_raises("type_error(list, E)", "write_term(a, asdf)")
def test_abolish(): e = get_engine("g(b, b). g(c, c). g(a). f(b, b). h(b, b).") assert_true("abolish(g/2).", e) assert_true("g(a).", e) prolog_raises("existence_error(X, Y)", "g(A, B)", e) prolog_raises("type_error(predicate_indicator, a)", "abolish(a)", e)
def test_error_unknown_function(): e = get_engine(""" g(a). f(X) :- g(X), h(X). """) prolog_raises("existence_error(procedure, h/1)", "f(X)", e)
def test_and(): assert_false("fail, X.") prolog_raises("type_error(callable, 1)", "(fail, 1)")
def test_write_term(): prolog_raises("domain_error(write_option, E)", "write_term(a, [quoted(af)])") prolog_raises("type_error(list, E)", "write_term(a, asdf)")
def test_abolish(): e = get_engine("g(b, b). g(c, c). g(a). f(b, b). h(b, b).") assert_true("abolish(g/2).", e) assert_true("g(a).", e) prolog_raises("existence_error(X, Y)", "g(A, B)", e) prolog_raises("type_error(predicate_indicator, a)", "abolish(a)", e)