add '', type checking for incomplete lists in sort, keysort (re: #17)
This commit is contained in:
52
src/tests.rs
52
src/tests.rs
@@ -1593,3 +1593,55 @@ fn test_queries_on_call_with_inference_limit()
|
||||
[["R = inference_limit_exceeded", "X = _1"]]);
|
||||
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_queries_on_skip_max_list() {
|
||||
let mut wam = Machine::new();
|
||||
|
||||
// test on proper and empty lists.
|
||||
assert_prolog_success!(&mut wam, "?- '$skip_max_list'(N, 5, [], Xs).",
|
||||
[["Xs = []", "N = 0"]]);
|
||||
assert_prolog_success!(&mut wam, "?- '$skip_max_list'(N, 5, [a,b,c], Xs).",
|
||||
[["Xs = []", "N = 3"]]);
|
||||
assert_prolog_success!(&mut wam, "?- '$skip_max_list'(N, 2, [a,b,c], Xs).",
|
||||
[["Xs = [c]", "N = 2"]]);
|
||||
assert_prolog_success!(&mut wam, "?- '$skip_max_list'(N, 3, [a,b,c], Xs).",
|
||||
[["Xs = []", "N = 3"]]);
|
||||
|
||||
assert_prolog_success!(&mut wam, "?- '$skip_max_list'(N, 0, [], Xs).",
|
||||
[["Xs = []", "N = 0"]]);
|
||||
assert_prolog_success!(&mut wam, "?- '$skip_max_list'(N, 0, [a,b,c], Xs).",
|
||||
[["Xs = [a, b, c]", "N = 0"]]);
|
||||
assert_prolog_success!(&mut wam, "?- '$skip_max_list'(N, 0, [a,b,c], Xs).",
|
||||
[["Xs = [a, b, c]", "N = 0"]]);
|
||||
assert_prolog_success!(&mut wam, "?- '$skip_max_list'(N, 0, [a,b,c], Xs).",
|
||||
[["Xs = [a, b, c]", "N = 0"]]);
|
||||
|
||||
assert_prolog_failure!(&mut wam, "?- '$skip_max_list'(4, 0, [], Xs).");
|
||||
assert_prolog_failure!(&mut wam, "?- '$skip_max_list'(3, 0, [a,b,c], Xs).");
|
||||
assert_prolog_failure!(&mut wam, "?- '$skip_max_list'(2, 0, [a,b,c], Xs).");
|
||||
assert_prolog_failure!(&mut wam, "?- '$skip_max_list'(1, 0, [a,b,c], Xs).");
|
||||
|
||||
assert_prolog_success!(&mut wam, "?- '$skip_max_list'(0, 5, [], Xs).",
|
||||
[["Xs = []"]]);
|
||||
assert_prolog_success!(&mut wam, "?- '$skip_max_list'(3, 5, [a,b,c], Xs).",
|
||||
[["Xs = []"]]);
|
||||
assert_prolog_success!(&mut wam, "?- '$skip_max_list'(2, 2, [a,b,c], Xs).",
|
||||
[["Xs = [c]"]]);
|
||||
assert_prolog_success!(&mut wam, "?- '$skip_max_list'(3, 3, [a,b,c], Xs).",
|
||||
[["Xs = []"]]);
|
||||
|
||||
// tests on partial lists.
|
||||
assert_prolog_success!(&mut wam, "?- '$skip_max_list'(3, 4, [a,b,c|X], Xs0).",
|
||||
[["X = _1", "Xs0 = _1"]]);
|
||||
assert_prolog_success!(&mut wam, "?- '$skip_max_list'(3, 3, [a,b,c|X], Xs0).",
|
||||
[["X = _1", "Xs0 = _1"]]);
|
||||
assert_prolog_failure!(&mut wam, "?- '$skip_max_list'(3, 2, [a,b,c|X], Xs0).");
|
||||
assert_prolog_failure!(&mut wam, "?- '$skip_max_list'(3, 1, [a,b,c|X], Xs0).");
|
||||
assert_prolog_failure!(&mut wam, "?- '$skip_max_list'(3, 0, [a,b,c|X], Xs0).");
|
||||
|
||||
// tests on cyclic lists.
|
||||
assert_prolog_failure!(&mut wam, "?- Xs = [a,b|Xs], '$skip_max_list'(3, 5, X, Xs0).");
|
||||
assert_prolog_failure!(&mut wam, "?- X = [a,b|Y], Y = [c,d|X], '$skip_max_list'(4, 5, X, Xs0).");
|
||||
assert_prolog_failure!(&mut wam, "?- X = [a,b|Y], Y = [c,d|X], '$skip_max_list'(4, 3, X, Xs0).");
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user