add tests on lists
This commit is contained in:
57
src/tests.rs
57
src/tests.rs
@@ -350,3 +350,60 @@ fn test_queries_on_cuts() {
|
||||
|
||||
assert_prolog_success!(&mut wam, "?- a(X).", ["X = c"]);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_queries_on_lists()
|
||||
{
|
||||
let mut wam = Machine::new();
|
||||
|
||||
submit(&mut wam, "p([Z, W]).");
|
||||
|
||||
assert_prolog_success!(&mut wam, "?- p([Z, Z]).", ["Z = _0"]);
|
||||
assert_prolog_failure!(&mut wam, "?- p([Z, W, Y]).");
|
||||
assert_prolog_success!(&mut wam, "?- p([Z | W]).", ["Z = _0", "W = [_3]"]);
|
||||
assert_prolog_success!(&mut wam, "?- p([Z | [Z]]).", ["Z = _0"]);
|
||||
assert_prolog_success!(&mut wam, "?- p([Z | [W]]).", ["Z = _2", "W = _0"]);
|
||||
assert_prolog_failure!(&mut wam, "?- p([Z | []]).");
|
||||
|
||||
submit(&mut wam, "p([Z, Z]).");
|
||||
|
||||
assert_prolog_success!(&mut wam, "?- p([Z, Z]).", ["Z = _0"]);
|
||||
assert_prolog_failure!(&mut wam, "?- p([Z, W, Y]).");
|
||||
assert_prolog_success!(&mut wam, "?- p([Z | W]).", ["Z = _0", "W = [_0]"]);
|
||||
assert_prolog_success!(&mut wam, "?- p([Z | [Z]]).", ["Z = _0"]);
|
||||
assert_prolog_success!(&mut wam, "?- p([Z | [W]]).", ["Z = _2", "W = _2"]);
|
||||
assert_prolog_failure!(&mut wam, "?- p([Z | []]).");
|
||||
|
||||
submit(&mut wam, "p([Z]).");
|
||||
|
||||
assert_prolog_failure!(&mut wam, "?- p([Z, Z]).");
|
||||
assert_prolog_failure!(&mut wam, "?- p([Z, W, Y]).");
|
||||
assert_prolog_success!(&mut wam, "?- p([Z | W]).", ["W = []", "Z = _0"]);
|
||||
assert_prolog_failure!(&mut wam, "?- p([Z | [Z]]).");
|
||||
assert_prolog_failure!(&mut wam, "?- p([Z | [W]]).");
|
||||
assert_prolog_success!(&mut wam, "?- p([Z | []]).", ["Z = _0"]);
|
||||
|
||||
submit(&mut wam, "member(X, [X|_]).
|
||||
member(X, [_|Xs]) :- member(X, Xs).");
|
||||
|
||||
assert_prolog_failure!(&mut wam, "?- member(a, [c, [X, Y]]).");
|
||||
assert_prolog_failure!(&mut wam, "?- member(c, [a, [X, Y]]).");
|
||||
assert_prolog_success!(&mut wam, "?- member(a, [a, [X, Y]]).", ["X = _2", "Y = _0"]);
|
||||
|
||||
assert_prolog_success!(&mut wam, "?- member(a, [X, Y, Z]).", ["Y = _2", "X = a", "Z = _0",
|
||||
"Y = a", "X = _4", "Z = _0",
|
||||
"Y = _2", "X = _4", "Z = a"]);
|
||||
|
||||
assert_prolog_success!(&mut wam, "?- member([X, X], [a, [X, Y]]).", ["X = _0", "Y = _0"]);
|
||||
assert_prolog_success!(&mut wam, "?- member([X, X], [a, [b, c], [b, b], [Z, x], [d, f]]).",
|
||||
["Z = _14", "X = b",
|
||||
"Z = x", "X = x"]);
|
||||
assert_prolog_failure!(&mut wam, "?- member([X, X], [a, [b, c], [b, d], [foo, x], [d, f]]).");
|
||||
assert_prolog_success!(&mut wam, "?- member([X, Y], [a, [b, c], [b, b], [Z, x], [d, f]]).",
|
||||
["X = b", "Y = c", "Z = _14",
|
||||
"X = b", "Y = b", "Z = _14",
|
||||
"X = _14", "Y = x", "Z = _14",
|
||||
"X = d", "Y = f", "Z = _14"]);
|
||||
assert_prolog_failure!(&mut wam, "?- member([X, Y, Y], [a, [b, c], [b, b], [Z, x], [d, f]]).");
|
||||
assert_prolog_failure!(&mut wam, "?- member([X, Y, Z], [a, [b, c], [b, b], [Z, x], [d, f]]).");
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user