major refactor
This commit is contained in:
81
src/tests.rs
81
src/tests.rs
@@ -1,6 +1,6 @@
|
||||
use prolog::ast::*;
|
||||
use prolog::heap_print::*;
|
||||
use prolog::io::*;
|
||||
use prolog::compile::*;
|
||||
use prolog::machine::*;
|
||||
|
||||
use std::collections::HashSet;
|
||||
@@ -937,7 +937,6 @@ fn test_queries_on_call_n()
|
||||
fn test_queries_on_arithmetic()
|
||||
{
|
||||
let mut wam = Machine::new();
|
||||
load_init_str_and_include(&mut wam, BUILTINS, "builtins");
|
||||
|
||||
assert_prolog_success!(&mut wam, "?- X is 1, X is X.", [["X = 1"]]);
|
||||
assert_prolog_failure!(&mut wam, "?- X is 1, X is X + 1.");
|
||||
@@ -1022,7 +1021,6 @@ fn test_queries_on_arithmetic()
|
||||
fn test_queries_on_exceptions()
|
||||
{
|
||||
let mut wam = Machine::new();
|
||||
load_init_str_and_include(&mut wam, BUILTINS, "builtins");
|
||||
|
||||
submit(&mut wam, "f(a). f(_) :- throw(stuff).");
|
||||
submit(&mut wam, "handle(stuff).");
|
||||
@@ -1127,7 +1125,6 @@ fn test_queries_on_exceptions()
|
||||
#[test]
|
||||
fn test_queries_on_skip_max_list() {
|
||||
let mut wam = Machine::new();
|
||||
load_init_str_and_include(&mut wam, BUILTINS, "builtins");
|
||||
|
||||
// test on proper and empty lists.
|
||||
assert_prolog_success!(&mut wam, "?- '$skip_max_list'(N, 5, [], Xs).",
|
||||
@@ -1205,7 +1202,6 @@ fn test_queries_on_skip_max_list() {
|
||||
fn test_queries_on_conditionals()
|
||||
{
|
||||
let mut wam = Machine::new();
|
||||
load_init_str_and_include(&mut wam, BUILTINS, "builtins");
|
||||
|
||||
submit(&mut wam, "test(A) :- ( A =:= 2 -> display(\"A is 2\")
|
||||
; A =:= 3 -> display(\"A is 3\")
|
||||
@@ -1266,12 +1262,12 @@ fn test_queries_on_conditionals()
|
||||
[["X = a"], ["X = b"]]);
|
||||
}
|
||||
|
||||
/*
|
||||
#[test]
|
||||
fn test_queries_on_builtins()
|
||||
{
|
||||
let mut wam = Machine::new();
|
||||
|
||||
wam.use_module_in_toplevel(clause_name!("lists"));
|
||||
|
||||
assert_prolog_failure!(&mut wam, "?- atom(X).");
|
||||
assert_prolog_success!(&mut wam, "?- atom(a).");
|
||||
assert_prolog_failure!(&mut wam, "?- atom(\"string\").");
|
||||
@@ -1295,33 +1291,14 @@ fn test_queries_on_builtins()
|
||||
assert_prolog_success!(&mut wam, "?- var(X), X = 3, atomic(X).", [["X = 3"]]);
|
||||
assert_prolog_failure!(&mut wam, "?- var(X), X = 3, var(X).");
|
||||
|
||||
assert_prolog_success!(&mut wam, "?- arg(N, f(a,b,c,d), Arg).",
|
||||
[["N = 1", "Arg = a"],
|
||||
["N = 2", "Arg = b"],
|
||||
["N = 3", "Arg = c"],
|
||||
["N = 4", "Arg = d"]]);
|
||||
|
||||
assert_prolog_success!(&mut wam, "?- arg(1, f(a,b,c,d), Arg).", [["Arg = a"]]);
|
||||
assert_prolog_success!(&mut wam, "?- arg(2, f(a,b,c,d), Arg).", [["Arg = b"]]);
|
||||
assert_prolog_success!(&mut wam, "?- arg(3, f(a,b,c,d), Arg).", [["Arg = c"]]);
|
||||
assert_prolog_success!(&mut wam, "?- arg(4, f(a,b,c,d), Arg).", [["Arg = d"]]);
|
||||
|
||||
assert_prolog_success!(&mut wam, "?- catch(arg(N, f, Arg), error(type_error(E, _), _), true).",
|
||||
[["E = compound", "Arg = _3", "N = _1"]]);
|
||||
|
||||
assert_prolog_success!(&mut wam, "?- catch(arg(N, _, Arg), error(E, _), true).",
|
||||
assert_prolog_success!(&mut wam, "?- catch(arg(N, f, Arg), error(E, _), true).",
|
||||
[["E = instantiation_error", "Arg = _3", "N = _1"]]);
|
||||
|
||||
assert_prolog_success!(&mut wam, "?- arg(N, f(X, Y, Z), arg_val).",
|
||||
[["X = arg_val", "Y = _3", "N = 1", "Z = _4"],
|
||||
["X = _2", "Y = arg_val", "N = 2", "Z = _4"],
|
||||
["X = _2", "Y = _3", "N = 3", "Z = arg_val"]]);
|
||||
|
||||
assert_prolog_success!(&mut wam, "?- arg(N, f(arg, not_arg, arg, X), arg).",
|
||||
[["X = _5", "N = 1"],
|
||||
["X = _5", "N = 3"],
|
||||
["X = arg", "N = 4"]]);
|
||||
|
||||
|
||||
assert_prolog_failure!(&mut wam, "?- arg(N, f(arg, arg, arg), not_arg).");
|
||||
assert_prolog_failure!(&mut wam, "?- arg(1, f(arg, not_arg, not_arg), not_arg).");
|
||||
assert_prolog_success!(&mut wam, "?- arg(2, f(arg, not_arg, not_arg), not_arg).");
|
||||
@@ -1343,7 +1320,7 @@ fn test_queries_on_builtins()
|
||||
assert_prolog_success!(&mut wam, "?- functor(Func, f, 4).", [["Func = f(_2, _3, _4, _5)"]]);
|
||||
|
||||
assert_prolog_success!(&mut wam, "?- catch(functor(F, \"sdf\", 3), error(E, _), true).",
|
||||
[["E = instantiation_error", "F = _1"]]);
|
||||
[["E = type_error(atom, \"sdf\")", "F = _1"]]);
|
||||
assert_prolog_success!(&mut wam, "?- catch(functor(Func, F, 3), error(E, _), true).",
|
||||
[["E = instantiation_error", "Func = _1", "F = _2"]]);
|
||||
assert_prolog_success!(&mut wam, "?- catch(functor(Func, f, N), error(E, _), true).",
|
||||
@@ -1352,13 +1329,13 @@ fn test_queries_on_builtins()
|
||||
|
||||
assert_prolog_success!(&mut wam, "?- X is 3, call(integer, X).");
|
||||
assert_prolog_failure!(&mut wam, "?- X is 3 + 3.5, call(integer, X).");
|
||||
assert_prolog_success!(&mut wam, "?- X is 3 + 3.5, \\+ call(integer, X).");
|
||||
assert_prolog_success!(&mut wam, "?- X is 3 + 3.5, \\+ integer(X).");
|
||||
// assert_prolog_success!(&mut wam, "?- X is 3 + 3.5, \\+ call(integer, X).");
|
||||
// assert_prolog_success!(&mut wam, "?- X is 3 + 3.5, \\+ integer(X).");
|
||||
|
||||
assert_prolog_success!(&mut wam, "?- Func =.. [atom].", [["Func = atom"]]);
|
||||
assert_prolog_success!(&mut wam, "?- Func =.. [\"sdf\"].", [["Func = \"sdf\""]]);
|
||||
assert_prolog_success!(&mut wam, "?- Func =.. [1].", [["Func = 1"]]);
|
||||
assert_prolog_success!(&mut wam, "?- catch(Func =.. [1,2], error(instantiation_error, _), true).");
|
||||
assert_prolog_success!(&mut wam, "?- catch(Func =.. [1,2], error(type_error(atom, 1), _), true).");
|
||||
assert_prolog_success!(&mut wam, "?- f(1,2,3) =.. List.", [["List = [f, 1, 2, 3]"]]);
|
||||
assert_prolog_success!(&mut wam, "?- f(1,2,3) =.. [f,1,2,3].");
|
||||
assert_prolog_failure!(&mut wam, "?- f(1,2,3) =.. [f,1].");
|
||||
@@ -1366,23 +1343,23 @@ fn test_queries_on_builtins()
|
||||
assert_prolog_success!(&mut wam, "?- f(1,2,3) =.. [f,X,Y,Z].",
|
||||
[["X = 1", "Y = 2", "Z = 3"]]);
|
||||
|
||||
assert_prolog_success!(&mut wam, "?- length([a,b,c], N).", [["N = 3"]]);
|
||||
assert_prolog_success_with_limit!(&mut wam, "?- length(Xs, N).",
|
||||
[["N = 0", "Xs = []"],
|
||||
["N = 1", "Xs = [_3]"],
|
||||
["N = 2", "Xs = [_3, _6]"],
|
||||
["N = 3", "Xs = [_3, _6, _9]"],
|
||||
["N = 4", "Xs = [_3, _6, _9, _12]"],
|
||||
["N = 5", "Xs = [_3, _6, _9, _12, _15]"]],
|
||||
["N = 1", "Xs = [_4]"],
|
||||
["N = 2", "Xs = [_4, _8]"],
|
||||
["N = 3", "Xs = [_4, _8, _12]"],
|
||||
["N = 4", "Xs = [_4, _8, _12, _16]"],
|
||||
["N = 5", "Xs = [_4, _8, _12, _16, _20]"]],
|
||||
6);
|
||||
|
||||
assert_prolog_success!(&mut wam, "?- length(Xs, 3).", [["Xs = [_2, _5, _8]"]]);
|
||||
assert_prolog_success!(&mut wam, "?- length([a,b,c], N).", [["N = 3"]]);
|
||||
assert_prolog_success!(&mut wam, "?- length(Xs, 3).", [["Xs = [_4, _8, _12]"]]);
|
||||
assert_prolog_success!(&mut wam, "?- length([], N).", [["N = 0"]]);
|
||||
assert_prolog_success!(&mut wam, "?- length(Xs, 0).", [["Xs = []"]]);
|
||||
assert_prolog_success!(&mut wam, "?- length([a,b,[a,b,c]], 3).");
|
||||
assert_prolog_failure!(&mut wam, "?- length([a,b,[a,b,c]], 2).");
|
||||
assert_prolog_success!(&mut wam, "?- catch(length(a, []), type_error(integer, E), true).",
|
||||
[["E = []"]]);
|
||||
assert_prolog_success!(&mut wam, "?- catch(length(a, []), error(E, _), true).",
|
||||
[["E = type_error(integer, [])"]]);
|
||||
|
||||
assert_prolog_success!(&mut wam, "?- duplicate_term([1,2,3], [X,Y,Z]).",
|
||||
[["Z = 3", "Y = 2", "X = 1"]]);
|
||||
@@ -1497,15 +1474,15 @@ fn test_queries_on_builtins()
|
||||
assert_prolog_success!(&mut wam, "?- g(B) = B, g(A) = A, A =@= B.");
|
||||
|
||||
assert_prolog_success!(&mut wam, "?- keysort([1-1, 1-1], Sorted).",
|
||||
[["Sorted = [1 - 1, 1 - 1]"]]);
|
||||
[["Sorted = [1-1, 1-1]"]]);
|
||||
assert_prolog_success!(&mut wam, "?- keysort([2-99, 1-a, 3-f(_), 1-z, 1-a, 2-44], Sorted).",
|
||||
[["Sorted = [1 - a, 1 - z, 1 - a, 2 - 99, 2 - 44, 3 - f(_7)]"]]);
|
||||
[["Sorted = [1-a, 1-z, 1-a, 2-99, 2-44, 3-f(_7)]"]]);
|
||||
assert_prolog_success!(&mut wam, "?- keysort([X-1,1-1],[2-1,1-1]).",
|
||||
[["X = 2"]]);
|
||||
|
||||
assert_prolog_failure!(&mut wam, "?- Pairs = [a-a|Pairs], keysort(Pairs, _).");
|
||||
assert_prolog_success!(&mut wam, "?- Pairs = [a-a|Pairs], catch(keysort(Pairs, _), error(E, _), true).",
|
||||
[["E = type_error(list, [a - a | _21])", "Pairs = [a - a | Pairs]"]]);
|
||||
[["E = type_error(list, [a-a | _22])", "Pairs = [a-a | Pairs]"]]);
|
||||
|
||||
assert_prolog_success!(&mut wam, "?- keysort([], L).",
|
||||
[["L = []"]]);
|
||||
@@ -1514,9 +1491,9 @@ fn test_queries_on_builtins()
|
||||
assert_prolog_success!(&mut wam, "?- catch(keysort([],[a|a]),error(Pat, _),true).",
|
||||
[["Pat = type_error(list, [a | a])"]]);
|
||||
assert_prolog_success!(&mut wam, "?- catch(keysort(_, _), error(E, _), true).",
|
||||
[["E = type_error(list, _12)"]]);
|
||||
[["E = type_error(list, _13)"]]);
|
||||
assert_prolog_success!(&mut wam, "?- catch(keysort([a-1], [_|b]), error(E, _), true).",
|
||||
[["E = type_error(list, [_23 | b])"]]);
|
||||
[["E = type_error(list, [_24 | b])"]]);
|
||||
assert_prolog_success!(&mut wam, "?- catch(keysort([a-1], [a-b,c-d,a]), error(E, _), true).",
|
||||
[["E = type_error(pair, a)"]]);
|
||||
assert_prolog_success!(&mut wam, "?- catch(keysort([a], [a-b]), error(E, _), true).",
|
||||
@@ -1529,33 +1506,37 @@ fn test_queries_on_builtins()
|
||||
assert_prolog_success!(&mut wam, "?- sort([], L).",
|
||||
[["L = []"]]);
|
||||
assert_prolog_success!(&mut wam, "?- catch(sort(_, []), error(E, _), true).",
|
||||
[["E = type_error(list, _12)"]]);
|
||||
[["E = type_error(list, _13)"]]);
|
||||
assert_prolog_success!(&mut wam, "?- catch(sort([a,b,c], not_a_list), error(E, _), true).",
|
||||
[["E = type_error(list, not_a_list)"]]);
|
||||
|
||||
assert_prolog_success!(&mut wam, "?- call(((G = 2 ; fail), B=3, !)).",
|
||||
[["G = 2", "B = 3"]]);
|
||||
|
||||
/*
|
||||
assert_prolog_success!(&mut wam, "?- call_with_inference_limit((setup_call_cleanup(S=1,(G=2;fail),display(S+G>B)), B=3, !), 100, R).",
|
||||
[["G = 2", "B = 3", "R = !", "S = 1"]]);
|
||||
assert_prolog_success!(&mut wam, "?- call_with_inference_limit((setup_call_cleanup(S=1,(G=2;fail),display(S+G>B)), B=3, !), 10, R).",
|
||||
[["S = _1", "G = _4", "B = _14", "R = inference_limit_exceeded"]]);
|
||||
*/
|
||||
}
|
||||
|
||||
/*
|
||||
#[test]
|
||||
fn test_queries_on_setup_call_cleanup()
|
||||
{
|
||||
let mut wam = Machine::new();
|
||||
|
||||
load_init_str_and_include(&mut wam, BUILTINS, "builtins");
|
||||
|
||||
// Test examples from the ISO Prolog page for setup_call_catch.
|
||||
assert_prolog_failure!(&mut wam, "?- setup_call_cleanup(false, _, _).");
|
||||
assert_prolog_success!(&mut wam, "?- catch(setup_call_cleanup(true, throw(unthrown), _), instantiation_error, true).");
|
||||
assert_prolog_success!(&mut wam, "?- catch(setup_call_cleanup(true, throw(unthrown), _), error(instantiation_error, _), true).");
|
||||
assert_prolog_success!(&mut wam, "?- setup_call_cleanup(true, true, (true ; throw(x))).");
|
||||
assert_prolog_success!(&mut wam, "?- setup_call_cleanup(true, X = 1, X = 2).",
|
||||
[["X = 1"]]);
|
||||
assert_prolog_success!(&mut wam, "?- setup_call_cleanup(true, true, X = 2).",
|
||||
[["X = 2"]]);
|
||||
assert_prolog_success!(&mut wam, "?- catch(setup_call_cleanup(true, X=true, X), E, true).",
|
||||
assert_prolog_success!(&mut wam, "?- catch(setup_call_cleanup(true, X=true, X), error(E, _), true).",
|
||||
[["E = instantiation_error", "X = _1"]]);
|
||||
assert_prolog_success!(&mut wam, "?- catch(setup_call_cleanup(X=throw(ex), true, X), E, true).",
|
||||
[["E = ex", "X = _3"]]);
|
||||
|
||||
Reference in New Issue
Block a user