package alice.tuprolog;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import org.junit.Before;
import org.junit.Test;
public class SubAtomTest {
Prolog engine;
@Before
public void setUp() {
engine = new Prolog();
}
@Test public void test0() throws PrologException {
SolveInfo solution = engine.solve("sub_atom(abracadabra, 0, 5, _, S2).");
assertTrue(solution.isSuccess());
Term binding = solution.getTerm("S2");
assertEquals(Term.createTerm("'abrac'"), binding);
}
@Test public void test1() throws PrologException {
SolveInfo solution = engine.solve("sub_atom(abracadabra, _, 5, 0, S2).");
assertTrue(solution.isSuccess());
Term binding = solution.getTerm("S2");
assertEquals(Term.createTerm("'dabra'"), binding);
}
@Test public void test2() throws PrologException {
SolveInfo solution = engine.solve("sub_atom(abracadabra, 3, L, 3, S2).");
assertTrue(solution.isSuccess());
Term binding = solution.getTerm("L");
assertEquals(Term.createTerm("5"), binding);
binding = solution.getTerm("S2");
assertEquals(Term.createTerm("'acada'"), binding);
}
@Test public void test3() throws PrologException {
SolveInfo solution = engine.solve("sub_atom(abracadabra, B, 2, A, ab).");
assertTrue(solution.isSuccess());
Term binding = solution.getTerm("B");
assertEquals(Term.createTerm("0"), binding);
binding = solution.getTerm("A");
assertEquals(Term.createTerm("9"), binding);
solution = engine.solveNext();
assertTrue(solution.isSuccess());
binding = solution.getTerm("B");
assertEquals(Term.createTerm("7"), binding);
binding = solution.getTerm("A");
assertEquals(Term.createTerm("2"), binding);
}
@Test public void test4() throws PrologException {
SolveInfo solution = engine.solve("sub_atom('Banana', 3, 2, _, S2).");
assertTrue(solution.isSuccess());
Term binding = solution.getTerm("S2");
assertEquals(Term.createTerm("'an'"), binding);
}
@Test public void test5() throws PrologException {
SolveInfo solution = engine.solve("sub_atom('charity', _, 3, _, S2).");
assertTrue(solution.isSuccess());
Term binding = solution.getTerm("S2");
assertEquals(Term.createTerm("'cha'"), binding);
solution = engine.solveNext();
assertTrue(solution.isSuccess());
binding = solution.getTerm("S2");
assertEquals(Term.createTerm("'har'"), binding);
solution = engine.solveNext();
assertTrue(solution.isSuccess());
binding = solution.getTerm("S2");
assertEquals(Term.createTerm("'ari'"), binding);
solution = engine.solveNext();
assertTrue(solution.isSuccess());
binding = solution.getTerm("S2");
assertEquals(Term.createTerm("'rit'"), binding);
solution = engine.solveNext();
assertTrue(solution.isSuccess());
binding = solution.getTerm("S2");
assertEquals(Term.createTerm("'ity'"), binding);
}
@Test public void test6() throws PrologException {
SolveInfo solution = engine.solve("sub_atom('ab', Start, Length, _, Sub_atom).");
assertTrue(solution.isSuccess());
Term binding = solution.getTerm("Start");
assertEquals(Term.createTerm("0"), binding);
binding = solution.getTerm("Length");
assertEquals(Term.createTerm("0"), binding);
binding = solution.getTerm("Sub_atom");
assertEquals(Term.createTerm("''"), binding);
solution = engine.solveNext();
assertTrue(solution.isSuccess());
binding = solution.getTerm("Start");
assertEquals(Term.createTerm("0"), binding);
binding = solution.getTerm("Length");
assertEquals(Term.createTerm("1"), binding);
binding = solution.getTerm("Sub_atom");
assertEquals(Term.createTerm("'a'"), binding);
solution = engine.solveNext();
assertTrue(solution.isSuccess());
binding = solution.getTerm("Start");
assertEquals(Term.createTerm("0"), binding);
binding = solution.getTerm("Length");
assertEquals(Term.createTerm("2"), binding);
binding = solution.getTerm("Sub_atom");
assertEquals(Term.createTerm("'ab'"), binding);
solution = engine.solveNext();
assertTrue(solution.isSuccess());
binding = solution.getTerm("Start");
assertEquals(Term.createTerm("1"), binding);
binding = solution.getTerm("Length");
assertEquals(Term.createTerm("0"), binding);
binding = solution.getTerm("Sub_atom");
assertEquals(Term.createTerm("''"), binding);
solution = engine.solveNext();
assertTrue(solution.isSuccess());
binding = solution.getTerm("Start");
assertEquals(Term.createTerm("1"), binding);
binding = solution.getTerm("Length");
assertEquals(Term.createTerm("1"), binding);
binding = solution.getTerm("Sub_atom");
assertEquals(Term.createTerm("'b'"), binding);
solution = engine.solveNext();
assertTrue(solution.isSuccess());
binding = solution.getTerm("Start");
assertEquals(Term.createTerm("2"), binding);
binding = solution.getTerm("Length");
assertEquals(Term.createTerm("0"), binding);
binding = solution.getTerm("Sub_atom");
assertEquals(Term.createTerm("''"), binding);
}
}