package alice.tuprolog; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import org.junit.Before; import org.junit.Test; public class AtomCharsTest { Prolog engine; @Before public void setUp() { engine = new Prolog(); } @Test public void emptyAtom() throws PrologException { SolveInfo solution = engine.solve("atom_chars('', L)."); assertTrue(solution.isSuccess()); assertEquals(new Struct(), solution.getTerm("L")); } @Test public void emptyListAtom() throws PrologException { SolveInfo solution = engine.solve("atom_chars([], L)."); assertTrue(solution.isSuccess()); Struct result = new Struct(new Term[] {new Struct("["), new Struct("]")}); assertEquals(result, solution.getTerm("L")); } @Test(expected=AssertionError.class) public void singleQuote() throws PrologException { SolveInfo solution = engine.solve("atom_chars('''', L)."); assertTrue(solution.isSuccess()); assertEquals(new Struct("'"), solution.getTerm("L")); } @Test public void simpleAtom() throws PrologException { SolveInfo solution = engine.solve("atom_chars('ant', L)."); assertTrue(solution.isSuccess()); Struct result = new Struct(new Term[] {new Struct("a"), new Struct("n"), new Struct("t")}); assertEquals(result, solution.getTerm("L")); } @Test public void simpleList() throws PrologException { SolveInfo solution = engine.solve("atom_chars(Str, ['s', 'o', 'p'])."); assertTrue(solution.isSuccess()); assertEquals(new Struct("sop"), solution.getTerm("Str")); } @Test public void subatomToListTail() throws PrologException { SolveInfo solution = engine.solve("atom_chars('North', ['N' | X])."); assertTrue(solution.isSuccess()); Term[] chars = new Term[] {new Struct("o"), new Struct("r"), new Struct("t"), new Struct("h")}; assertEquals(new Struct(chars), solution.getTerm("X")); } @Test public void wrongList() throws PrologException { SolveInfo solution = engine.solve("atom_chars('soap', ['s', 'o', 'p'])."); assertFalse(solution.isSuccess()); } @Test public void everythingIsAVariable() throws PrologException { SolveInfo solution = engine.solve("atom_chars(X, Y)."); assertFalse(solution.isSuccess()); // TODO Should throw instantiation_error } }