/////////////////////////////////////////////////////////////////////// // STANFORD LOGIC GROUP // // General Game Playing Project // // // // Sample Player Implementation // // // // (c) 2007. See LICENSE and CONTRIBUTORS. // /////////////////////////////////////////////////////////////////////// /** * */ package stanfordlogic.test.prover; import stanfordlogic.gdl.GdlList; import stanfordlogic.gdl.Parser; import stanfordlogic.gdl.SymbolTable; import stanfordlogic.prover.Fact; import stanfordlogic.prover.GroundFact; import stanfordlogic.prover.Substitution; import stanfordlogic.prover.TermVariable; import stanfordlogic.prover.Unifier; import stanfordlogic.prover.VariableFact; import junit.framework.TestCase; /** * */ public class TestUnifier extends TestCase { Parser parser_; SymbolTable symbolTable_; static TestUnifier currentTest; public static SymbolTable getTable() { return currentTest.symbolTable_; } @Override protected void setUp() throws Exception { super.setUp(); parser_ = new Parser(); symbolTable_ = parser_.getSymbolTable(); currentTest = this; } /* * Test method for 'camembert.prover.Unifier.mgu(Fact, Fact)' */ public void testBasicMgu() { GdlList l1, l2; Fact f1, f2; Substitution sigma; l1 = parser_.parse("foo baz bar"); l2 = parser_.parse("foo baz bar"); f1 = VariableFact.fromList(l1); f2 = GroundFact.fromList(l2); sigma = Unifier.mgu(f1, f2); assertNotNull(sigma); assertEquals(0, sigma.numMappings()); l1 = parser_.parse("foo ?x bar"); l2 = parser_.parse("foo baz bar"); f1 = VariableFact.fromList(l1); f2 = GroundFact.fromList(l2); sigma = Unifier.mgu( f1, f2 ); assertNotNull(sigma); assertEquals( f2.getTerm( 0 ), sigma.getMapping( (TermVariable) f1.getTerm( 0 ) ) ); assertEquals(1, sigma.numMappings()); l1 = parser_.parse("foo ?x ?x"); l2 = parser_.parse("foo baz ?y"); f1 = VariableFact.fromList(l1); f2 = VariableFact.fromList(l2); sigma = Unifier.mgu(f1,f2); assertNotNull(sigma); assertEquals( f2.getTerm(0), sigma.getMapping( (TermVariable) f1.getTerm(0)) ); assertEquals( f2.getTerm(0), sigma.getMapping( (TermVariable) f1.getTerm(1)) ); assertEquals( f2.getTerm(0), sigma.getMapping( (TermVariable) f2.getTerm(1)) ); assertEquals(2, sigma.numMappings()); } public void testFunctionMgu() { GdlList l1, l2; Fact f1, f2; Substitution sigma; l1 = parser_.parse("foo (f a b)"); l2 = parser_.parse("foo ?x"); f1 = GroundFact.fromList(l1); f2 = VariableFact.fromList(l2); sigma = Unifier.mgu(f1, f2); assertNotNull(sigma); assertEquals( f1.getTerm(0), sigma.getMapping( (TermVariable) f2.getTerm(0)) ); assertEquals(1, sigma.numMappings()); } public void testBadMgu() { GdlList l1, l2; Fact f1, f2; Substitution sigma; // Now try one that will fail l1 = parser_.parse("foo ?x ?x"); l2 = parser_.parse("foo bar baz"); f1 = VariableFact.fromList(l1); f2 = VariableFact.fromList(l2); sigma = Unifier.mgu(f1,f2); assertNull(sigma); l1 = parser_.parse("foo ?x b ?x"); l2 = parser_.parse("foo ?y b (f ?y)"); f1 = VariableFact.fromList(l1); f2 = VariableFact.fromList(l2); sigma = Unifier.mgu(f1, f2); assertNull(sigma); } public void testDifferentFunctions() { GdlList l1, l2; Fact f1, f2; Substitution sigma; l1 = parser_.parse("foo ?x ?x"); l2 = parser_.parse("toto bar baz"); f1 = VariableFact.fromList(l1); f2 = VariableFact.fromList(l2); sigma = Unifier.mgu(f1,f2); assertNull(sigma); } public void testDifferentArity() { GdlList l1, l2; Fact f1, f2; Substitution sigma; l1 = parser_.parse("foo ?x ?y"); l2 = parser_.parse("foo ?x ?y bar"); f1 = VariableFact.fromList(l1); f2 = VariableFact.fromList(l2); sigma = Unifier.mgu(f1,f2); assertNull(sigma); } public void testIdenticalFunction() { GdlList l1, l2; Fact f1, f2; Substitution sigma; l1 = parser_.parse("foo ?x"); l2 = parser_.parse("foo ?x"); f1 = VariableFact.fromList(l1); f2 = VariableFact.fromList(l2); sigma = Unifier.mgu(f1,f2); assertNotNull(sigma); } public void testIdenticalVariables() { GdlList l1, l2; Fact f1, f2; Substitution sigma; l1 = parser_.parse("foo ?x ?x"); l2 = parser_.parse("foo ?x ?x"); f1 = VariableFact.fromList(l1); f2 = (VariableFact) VariableFact.fromList(l2).uniquefy(); sigma = Unifier.mgu(f1,f2); assertNotNull(sigma); assertEquals(1, sigma.numMappings()); } public void testIdenticalVariableNames() { GdlList l1, l2; Fact f1, f2; Substitution sigma; l1 = parser_.parse("foo ?x ?y"); l2 = parser_.parse("foo ?y ?y"); f1 = VariableFact.fromList(l1); f2 = (VariableFact) VariableFact.fromList(l2).uniquefy(); sigma = Unifier.mgu(f1,f2); assertNotNull(sigma); assertEquals(2, sigma.numMappings()); } public void testRecursiveSub() { GdlList l1, l2; Fact f1, f2; Substitution sigma; l1 = parser_.parse("foo ?x ?x ?z"); l2 = parser_.parse("foo a ?y ?y"); f1 = VariableFact.fromList(l1); f2 = VariableFact.fromList(l2); sigma = Unifier.mgu(f1,f2); assertNotNull(sigma); assertTrue(sigma.numMappings() == 3); } }