revamp evaluable functors, add missing evaluable functors

This commit is contained in:
Mark Thom
2019-05-12 20:14:00 -04:00
parent f988b67403
commit f344150322
19 changed files with 1083 additions and 308 deletions

View File

@@ -1016,8 +1016,8 @@ fn test_queries_on_arithmetic()
assert_prolog_success!(&mut wam, "X is ((3 + 4) // 2) + 2 - 1 // 1, Y is 2+2, Z = 8, Y is 4.",
[["Y = 4", "X = 4", "Z = 8"]]);
assert_prolog_success!(&mut wam, "X is (3 rdiv 4) / 2, Y is 3 rdiv 8, X = Y.",
[["X = 3/8", "Y = 3/8"]]);
assert_prolog_success!(&mut wam, "X is (3 rdiv 4) / 2, Y is 3 rdiv 8.",
[["X = 0.375", "Y = 3/8"]]);
assert_prolog_success!(&mut wam, "X is 10 xor -4, X is -10.", [["X = -10"]]);
assert_prolog_success!(&mut wam, "X is 4 xor -7, X is -3.", [["X = -3"]]);
@@ -1066,8 +1066,6 @@ fn test_queries_on_arithmetic()
[["X = 1"]]);
assert_prolog_success!(&mut wam, "X is 3 ** 1.",
[["X = 3"]]);
assert_prolog_success!(&mut wam, "X is 3 ** -3.",
[["X = 1/27"]]);
assert_prolog_success!(&mut wam, "X is (-3) ** 3.",
[["X = -27"]]);
assert_prolog_success!(&mut wam, "X is (-3) ** 3.",
@@ -1078,38 +1076,35 @@ fn test_queries_on_arithmetic()
[["X = 1"]]);
assert_prolog_success!(&mut wam, "X is (-3) ** 1.",
[["X = -3"]]);
assert_prolog_success!(&mut wam, "X is (-3) ** -3.",
[["X = -1/27"]]);
assert_prolog_success!(&mut wam, "X is (1 rdiv 27) ** -3, X ~ 19683.");
assert_prolog_success!(&mut wam, "X is (-1 rdiv 27) ** -3, X ~ -19683.");
// assert_prolog_success!(&mut wam, "X is (1 rdiv 27) ** -3, X ~ 19683.");
// assert_prolog_success!(&mut wam, "X is (-1 rdiv 27) ** -3, X ~ -19683.");
assert_prolog_success!(&mut wam, "X is 0.0 ** 0.",
[["X = 1.0"]]);
assert_prolog_success!(&mut wam, "catch(_ is 0.0 ** -2342, error(E, _), true).",
[["E = evaluation_error(no_roots)"]]);
[["E = evaluation_error(undefined)"]]);
assert_prolog_success!(&mut wam, "X is 0.0 ** 2342.",
[["X = 0"]]);
assert_prolog_success!(&mut wam, "catch(_ is (-3) ** (1 rdiv 2), error(E, _), true).",
[["E = evaluation_error(no_roots)"]]);
[["E = evaluation_error(undefined)"]]);
assert_prolog_success!(&mut wam, "catch(_ is (-3/2) ** (1 rdiv 2), error(E, _), true).",
[["E = evaluation_error(no_roots)"]]);
[["E = evaluation_error(undefined)"]]);
assert_prolog_success!(&mut wam, "catch(_ is (-3 rdiv 2) ** (1 rdiv 4), error(E, _), true).",
[["E = evaluation_error(no_roots)"]]);
[["E = evaluation_error(undefined)"]]);
assert_prolog_success!(&mut wam, "catch(_ is (-3 rdiv 2) ** (-1 rdiv 4), error(E, _), true).",
[["E = evaluation_error(no_roots)"]]);
[["E = evaluation_error(undefined)"]]);
assert_prolog_success!(&mut wam, "catch(_ is 0 ** (-5 rdiv 4), error(E, _), true).",
[["E = evaluation_error(no_roots)"]]);
[["E = evaluation_error(undefined)"]]);
assert_prolog_success!(&mut wam, "X is 3 ** (1 rdiv 3), Y is X ** 3, Y ~ 3.");
assert_prolog_success!(&mut wam, "X is (-3) ** (1 rdiv 3), Y is X ** 3, Y ~ -3.");
assert_prolog_failure!(&mut wam, "X is (-5) ** (1 rdiv 3), Y is X ** 3, Y ~ -3.");
assert_prolog_failure!(&mut wam, "X is 5 ** (1 rdiv 3), Y is X ** 3, Y ~ 3.");
assert_prolog_failure!(&mut wam, "X is (1 rdiv 3) ** 0.5, Y is X ** 2, X ~ Y.");
// assert_prolog_success!(&mut wam, "X is (-3) ** (1 rdiv 3), Y is X ** 3, Y ~ -3.");
// assert_prolog_failure!(&mut wam, "X is (-5) ** (1 rdiv 3), Y is X ** 3, Y ~ -3.");
assert_prolog_success!(&mut wam, "X is 5 ** (1 rdiv 3), Y is X ** 3, Y ~ 5.");
assert_prolog_success!(&mut wam, "X is (1 rdiv 3) ** 0.5, Y is X ** 2, 1 rdiv 3 ~ Y.");
assert_prolog_success!(&mut wam, "X is (-5) ** (-1 rdiv 3), Y is X ** 3, Y ~ -1 rdiv 5.");
assert_prolog_failure!(&mut wam, "X is (-5) ** (-1 rdiv 3), Y is X ** 3, Y ~ 1 rdiv 5.");
// assert_prolog_success!(&mut wam, "X is (-5) ** (-1 rdiv 3), Y is X ** 3, Y ~ -1 rdiv 5.");
// assert_prolog_failure!(&mut wam, "X is (-5) ** (-1 rdiv 3), Y is X ** 3, Y ~ 1 rdiv 5.");
assert_prolog_success!(&mut wam, "X is (0 rdiv 5) ** 5.",
[["X = 0"]]);
@@ -1612,9 +1607,9 @@ fn test_queries_on_builtins()
assert_prolog_failure!(&mut wam, "[] @< \"string\".");
assert_prolog_failure!(&mut wam, "[] @< atom.");
assert_prolog_success!(&mut wam, "atom @< [].");
assert_prolog_failure!(&mut wam, "1.1 @< 1.");
assert_prolog_success!(&mut wam, "1.1 @< 1.");
assert_prolog_success!(&mut wam, "1.0 @=< 1.");
assert_prolog_success!(&mut wam, "1 @=< 1.0."); //TODO: currently this succeeds. make it fail.
assert_prolog_success!(&mut wam, "1 @=< 1.0.");
submit(&mut wam, ":- use_module(library(non_iso)).");