]> Repositorios git - scryer-prolog.git/commitdiff
add tests for conditionals
authorMark Thom <[email protected]>
Thu, 25 Jan 2018 05:30:20 +0000 (22:30 -0700)
committerMark Thom <[email protected]>
Thu, 25 Jan 2018 05:30:20 +0000 (22:30 -0700)
src/tests.rs

index 4bee1d8a257eb99c856bf2b3820d95201c6d44a3..68e8933048c4c15a100570ec86e960e2b8e74ff6 100644 (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"]]);
+}