package alice.tuprolog;
import org.junit.Before;
import org.junit.Test;
import static org.junit.Assert.*;
public class UnivTest {
Prolog engine;
@Before
public void setUp() {
engine = new Prolog();
}
@Test public void test0() throws PrologException {
SolveInfo solution = engine.solve("'=..'(foo(a, b), [foo, a, b]).");
assertTrue(solution.isSuccess());
}
@Test public void test1() throws PrologException {
SolveInfo solution = engine.solve("'=..'(1, [1]).");
assertTrue(solution.isSuccess());
}
@Test public void test2() throws PrologException {
SolveInfo solution = engine.solve("'=..'(foo(a, b), [foo, b, a]).");
assertFalse(solution.isSuccess());
}
@Test public void test3() throws PrologException {
SolveInfo solution = engine.solve("'=..'(f(X), [f, u(X)]).");
assertFalse(solution.isSuccess());
}
@Test public void test4() throws PrologException {
SolveInfo solution = engine.solve("'=..'(X, [foo, a, b]).");
assertTrue(solution.isSuccess());
Term binding = solution.getTerm("X");
assertEquals(Term.createTerm("foo(a, b)"), binding);
}
@Test public void test5() throws PrologException {
SolveInfo solution = engine.solve("'=..'(foo(a, b), L).");
assertTrue(solution.isSuccess());
Term binding = solution.getTerm("L");
assertEquals(Term.createTerm("[foo, a, b]"), binding);
}
@Test public void test6() throws PrologException {
SolveInfo solution = engine.solve("'=..'(foo(X, b), [foo, a, Y]).");
assertTrue(solution.isSuccess());
Term binding = solution.getTerm("X");
assertEquals(Term.createTerm("a"), binding);
binding = solution.getTerm("Y");
assertEquals(Term.createTerm("b"), binding);
}
@Test public void test7() throws PrologException {
SolveInfo solution = engine.solve("'=..'(X, Y).");
assertFalse(solution.isSuccess());
// TODO Should throw instantiation_error
}
@Test public void test8() throws PrologException {
SolveInfo solution = engine.solve("'=..'(X, [foo, a | Y]).");
assertFalse(solution.isSuccess());
// TODO Should throw instantiation_error
}
@Test public void test9() throws PrologException {
SolveInfo solution = engine.solve("'=..'(X, [foo | bar]).");
assertFalse(solution.isSuccess());
// TODO Should throw type_error(list, [foo | bar])
}
@Test public void test10() throws PrologException {
SolveInfo solution = engine.solve("'=..'(X, [Foo, bar]).");
assertFalse(solution.isSuccess());
// TODO Should throw instantiation_error
}
@Test public void test11() throws PrologException {
SolveInfo solution = engine.solve("'=..'(X, [3, 1]).");
assertFalse(solution.isSuccess());
// TODO Should throw type_error(atom, 3)
}
@Test public void test12() throws PrologException {
SolveInfo solution = engine.solve("'=..'(X, [1.1, foo]).");
assertFalse(solution.isSuccess());
// TODO Should throw type_error(atom, 1.1)
}
@Test public void test13() throws PrologException {
SolveInfo solution = engine.solve("'=..'(X, [a(b), 1]).");
assertFalse(solution.isSuccess());
// TODO Should throw type_error(atom, a(b))
}
@Test public void test14() throws PrologException {
SolveInfo solution = engine.solve("'=..'(X, 4).");
assertFalse(solution.isSuccess());
// TODO Should throw type_error(list, 4)
}
}