From f2124448d04c0ec3eea00dcf52449ea90a72093c Mon Sep 17 00:00:00 2001 From: Mark Thom Date: Wed, 24 Jan 2018 22:30:20 -0700 Subject: [PATCH] add tests for conditionals --- src/tests.rs | 57 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) diff --git a/src/tests.rs b/src/tests.rs index 4bee1d8a..68e89330 100644 --- a/src/tests.rs +++ b/src/tests.rs @@ -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"]]); +} -- 2.54.0