add tests for conditionals

This commit is contained in:
Mark Thom
2018-01-24 22:30:20 -07:00
parent 41dc8e8d6a
commit f2124448d0

View File

@@ -1109,3 +1109,60 @@ fn test_queries_on_arithmetic()
assert_prolog_success!(&mut wam, "?- f(5, 33).");
assert_prolog_failure!(&mut wam, "?- f(5, 32).");
}
#[test]
fn test_queries_on_conditionals()
{
let mut wam = Machine::new();
submit(&mut wam, "test(A) :- ( A =:= 2 ->
display(\"A is 2\")
; A =:= 3 ->
display(\"A is 3\")
; A = \"not 2 or 3\"
).");
assert_prolog_success!(&mut wam, "?- catch(test(A), instantiation_error(_), true).");
assert_prolog_success!(&mut wam, "?- A = 2, test(A).", [["A = 2"]]);
assert_prolog_success!(&mut wam, "?- A = 3, test(A), B = 3, test(B).", [["A = 3", "B = 3"]]);
submit(&mut wam, "f(a). f(b).");
submit(&mut wam, "g(1). g(2). g(3).");
submit(&mut wam, "typed_dispatch(X) :- ( var(X) -> f(X)
; integer(X) -> g(X)
; atomic(X)).");
assert_prolog_success!(&mut wam, "?- typed_dispatch(X).", [["X = a"], ["X = b"]]);
assert_prolog_success!(&mut wam, "?- typed_dispatch(a).");
assert_prolog_success!(&mut wam, "?- typed_dispatch(b).");
assert_prolog_success!(&mut wam, "?- typed_dispatch(c).");
assert_prolog_success!(&mut wam, "?- typed_dispatch(1).");
assert_prolog_success!(&mut wam, "?- typed_dispatch(2).");
assert_prolog_success!(&mut wam, "?- typed_dispatch(3).");
assert_prolog_failure!(&mut wam, "?- typed_dispatch(4).");
assert_prolog_failure!(&mut wam, "?- typed_dispatch(5).");
assert_prolog_failure!(&mut wam, "?- typed_dispatch(compound(term)).");
submit(&mut wam, "f(a). f(b). f(compound(term)).");
submit(&mut wam, "g(X, Y) :- f(X), (atomic(X) -> X = a ; X = a ; X = compound(Y)).");
assert_prolog_success!(&mut wam, "?- g(X, Y).",
[["Y = _1", "X = a"],
["Y = term", "X = compound(term)"]]);
assert_prolog_success!(&mut wam, "?- g(X, X).", [["X = a"]]);
assert_prolog_success!(&mut wam, "?- g(compound(X), X).", [["X = term"]]);
assert_prolog_success!(&mut wam, "?- g(X, term).", [["X = a"], ["X = compound(term)"]]);
assert_prolog_success!(&mut wam, "?- g(a, _).");
assert_prolog_success!(&mut wam, "?- g(X, _), X = a.", [["X = a"]]);
submit(&mut wam, "g(X) :- var(X) -> (var(X) -> X is 3 + 3 ; X = not_6).");
assert_prolog_success!(&mut wam, "?- g(X).", [["X = 6"]]);
assert_prolog_failure!(&mut wam, "?- g(1).");
assert_prolog_failure!(&mut wam, "?- g(6).");
assert_prolog_failure!(&mut wam, "?- g(not_6).");
assert_prolog_success!(&mut wam, "?- f(X), (g(Y), !).", [["X = a", "Y = 6"]]);
}