package aima.test.core.unit.logic.propositional.kb.data; import org.junit.Assert; import org.junit.Before; import org.junit.Test; import aima.core.logic.propositional.kb.data.Model; import aima.core.logic.propositional.parsing.PLParser; import aima.core.logic.propositional.parsing.ast.Sentence; import aima.core.logic.propositional.parsing.ast.PropositionSymbol; /** * @author Ravi Mohan * */ public class ModelTest { private Model m; private PLParser parser; Sentence trueSentence, falseSentence, andSentence, orSentence, impliedSentence, biConditionalSentence; @Before public void setUp() { parser = new PLParser(); trueSentence = (Sentence) parser.parse("true"); falseSentence = (Sentence) parser.parse("false"); andSentence = (Sentence) parser.parse("(P & Q)"); orSentence = (Sentence) parser.parse("(P | Q)"); impliedSentence = (Sentence) parser.parse("(P => Q)"); biConditionalSentence = (Sentence) parser.parse("(P <=> Q)"); m = new Model(); } @Test public void testEmptyModel() { Assert.assertEquals(null, m.getValue(new PropositionSymbol("P"))); Assert.assertEquals(true, m.isUnknown(new PropositionSymbol("P"))); } @Test public void testExtendModel() { String p = "P"; m = m.union(new PropositionSymbol(p), true); Assert.assertEquals(Boolean.TRUE, m.getValue(new PropositionSymbol("P"))); } @Test public void testTrueFalseEvaluation() { Assert.assertEquals(true, m.isTrue(trueSentence)); Assert.assertEquals(false, m.isFalse(trueSentence)); Assert.assertEquals(false, m.isTrue(falseSentence)); Assert.assertEquals(true, m.isFalse(falseSentence)); } @Test public void testSentenceStatusWhenPTrueAndQTrue() { String p = "P"; String q = "Q"; m = m.union(new PropositionSymbol(p), true); m = m.union(new PropositionSymbol(q), true); Assert.assertEquals(true, m.isTrue(andSentence)); Assert.assertEquals(true, m.isTrue(orSentence)); Assert.assertEquals(true, m.isTrue(impliedSentence)); Assert.assertEquals(true, m.isTrue(biConditionalSentence)); } @Test public void testSentenceStatusWhenPFalseAndQFalse() { String p = "P"; String q = "Q"; m = m.union(new PropositionSymbol(p), false); m = m.union(new PropositionSymbol(q), false); Assert.assertEquals(true, m.isFalse(andSentence)); Assert.assertEquals(true, m.isFalse(orSentence)); Assert.assertEquals(true, m.isTrue(impliedSentence)); Assert.assertEquals(true, m.isTrue(biConditionalSentence)); } @Test public void testSentenceStatusWhenPTrueAndQFalse() { String p = "P"; String q = "Q"; m = m.union(new PropositionSymbol(p), true); m = m.union(new PropositionSymbol(q), false); Assert.assertEquals(true, m.isFalse(andSentence)); Assert.assertEquals(true, m.isTrue(orSentence)); Assert.assertEquals(true, m.isFalse(impliedSentence)); Assert.assertEquals(true, m.isFalse(biConditionalSentence)); } @Test public void testSentenceStatusWhenPFalseAndQTrue() { String p = "P"; String q = "Q"; m = m.union(new PropositionSymbol(p), false); m = m.union(new PropositionSymbol(q), true); Assert.assertEquals(true, m.isFalse(andSentence)); Assert.assertEquals(true, m.isTrue(orSentence)); Assert.assertEquals(true, m.isTrue(impliedSentence)); Assert.assertEquals(true, m.isFalse(biConditionalSentence)); } @Test public void testComplexSentence() { String p = "P"; String q = "Q"; m = m.union(new PropositionSymbol(p), true); m = m.union(new PropositionSymbol(q), false); Sentence sent = (Sentence) parser.parse("((P | Q) & (P => Q))"); Assert.assertFalse(m.isTrue(sent)); Assert.assertTrue(m.isFalse(sent)); Sentence sent2 = (Sentence) parser.parse("((P | Q) & (Q))"); Assert.assertFalse(m.isTrue(sent2)); Assert.assertTrue(m.isFalse(sent2)); } }