package aima.test.core.unit.logic.propositional.algorithms; import org.junit.Assert; import org.junit.Before; import org.junit.Test; import aima.core.logic.propositional.algorithms.KnowledgeBase; import aima.core.logic.propositional.algorithms.Model; import aima.core.logic.propositional.algorithms.TTEntails; import aima.core.logic.propositional.parsing.ast.Sentence; import aima.core.logic.propositional.parsing.ast.Symbol; /** * @author Ravi Mohan * */ public class TTEntailsTest { TTEntails tte; KnowledgeBase kb; @Before public void setUp() { tte = new TTEntails(); kb = new KnowledgeBase(); } @Test public void testSimpleSentence1() { kb.tell("(A AND B)"); Assert.assertEquals(true, kb.askWithTTEntails("A")); } @Test public void testSimpleSentence2() { kb.tell("(A OR B)"); Assert.assertEquals(false, kb.askWithTTEntails("A")); } @Test public void testSimpleSentence3() { kb.tell("((A => B) AND A)"); Assert.assertEquals(true, kb.askWithTTEntails("B")); } @Test public void testSimpleSentence4() { kb.tell("((A => B) AND B)"); Assert.assertEquals(false, kb.askWithTTEntails("A")); } @Test public void testSimpleSentence5() { kb.tell("A"); Assert.assertEquals(false, kb.askWithTTEntails("NOT A")); } @Test public void testSUnkownSymbol() { kb.tell("((A => B) AND B)"); Assert.assertEquals(false, kb.askWithTTEntails("X")); } @Test public void testSimpleSentence6() { kb.tell("NOT A"); Assert.assertEquals(false, kb.askWithTTEntails("A")); } @Test public void testNewAIMAExample() { kb.tell("(NOT P11)"); kb.tell("(B11 <=> (P12 OR P21))"); kb.tell("(B21 <=> ((P11 OR P22) OR P31))"); kb.tell("(NOT B11)"); kb.tell("(B21)"); Assert.assertEquals(true, kb.askWithTTEntails("NOT P12")); Assert.assertEquals(false, kb.askWithTTEntails("P22")); } @Test public void testTTEntailsSucceedsWithChadCarffsBugReport() { KnowledgeBase kb = new KnowledgeBase(); kb.tell("(B12 <=> (P11 OR (P13 OR (P22 OR P02))))"); kb.tell("(B21 <=> (P20 OR (P22 OR (P31 OR P11))))"); kb.tell("(B01 <=> (P00 OR (P02 OR P11)))"); kb.tell("(B10 <=> (P11 OR (P20 OR P00)))"); kb.tell("(NOT B21)"); kb.tell("(NOT B12)"); kb.tell("(B10)"); kb.tell("(B01)"); Assert.assertTrue(kb.askWithTTEntails("(P00)")); Assert.assertFalse(kb.askWithTTEntails("(NOT P00)")); } @Test public void testDoesNotKnow() { KnowledgeBase kb = new KnowledgeBase(); kb.tell("A"); Assert.assertFalse(kb.askWithTTEntails("B")); Assert.assertFalse(kb.askWithTTEntails("(NOT B)")); } // public void testTTEntailsSucceedsWithCStackOverFlowBugReport() { // KnowledgeBase kb = new KnowledgeBase(); // // assertTrue(kb.askWithTTEntails("((A OR (NOT A)) AND (A OR B))")); // } @Test public void testModelEvaluation() { kb.tell("(NOT P11)"); kb.tell("(B11 <=> (P12 OR P21))"); kb.tell("(B21 <=> ((P11 OR P22) OR P31))"); kb.tell("(NOT B11)"); kb.tell("(B21)"); Model model = new Model(); model = model.extend(new Symbol("B11"), false); model = model.extend(new Symbol("B21"), true); model = model.extend(new Symbol("P11"), false); model = model.extend(new Symbol("P12"), false); model = model.extend(new Symbol("P21"), false); model = model.extend(new Symbol("P22"), false); model = model.extend(new Symbol("P31"), true); Sentence kbs = kb.asSentence(); Assert.assertEquals(true, model.isTrue(kbs)); } }