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 DisjunctionTest { Prolog engine; @Before public void setUp() { engine = new Prolog(); } @Test public void simpleDisjunction() throws PrologException { SolveInfo solution = engine.solve("';'(true, fail)."); assertTrue(solution.isSuccess()); } @Test public void disjunctionCutFail() throws PrologException { SolveInfo solution = engine.solve("';'((!, fail), true)."); assertFalse(solution.isSuccess()); } @Test public void disjunctionCutAvoidError() throws PrologException { SolveInfo solution = engine.solve("';'(!, call(3))."); assertTrue(solution.isSuccess()); } @Test public void disjunctionWithUnification() throws PrologException { SolveInfo solution = engine.solve("';'((X=1, !), X=2)."); assertTrue(solution.isSuccess()); assertEquals(new Int(1), solution.getTerm("X")); } @Test public void disjunctionWithReexecution() throws PrologException { SolveInfo solution = engine.solve("','(';'(X=1, X=2), ';'(true, !))."); assertTrue(solution.isSuccess()); assertEquals(new Int(1), solution.getTerm("X")); solution = engine.solveNext(); assertTrue(solution.isSuccess()); assertEquals(new Int(1), solution.getTerm("X")); assertFalse(engine.hasOpenAlternatives()); } }