protected void testDefiniteClauseKBKingsQueryKingXReturnsJohnAndRichardSucceeds( InferenceProcedure infp) { FOLKnowledgeBase kkb = FOLKnowledgeBaseFactory .createKingsKnowledgeBase(infp); List<Term> terms = new List<Term>(); terms.Add(new Variable("x")); Predicate query = new Predicate("King", terms); InferenceResult answer = kkb.ask(query); Assert.IsTrue(null != answer); Assert.IsFalse(answer.isPossiblyFalse()); Assert.IsTrue(answer.isTrue()); Assert.IsFalse(answer.isUnknownDueToTimeout()); Assert.IsFalse(answer.isPartialResultDueToTimeout()); Assert.IsTrue(2 == answer.getProofs().Count); Assert.IsTrue(1 == answer.getProofs()[0].getAnswerBindings() .Count); Assert.IsTrue(1 == answer.getProofs()[1].getAnswerBindings() .Count); bool gotJohn, gotRichard; gotJohn = gotRichard = false; Constant cJohn = new Constant("John"); Constant cRichard = new Constant("Richard"); foreach (Proof p in answer.getProofs()) { Dictionary<Variable, Term> ans = p.getAnswerBindings(); Assert.AreEqual(1, ans.Count); if (cJohn.Equals(ans[new Variable("x")])) { gotJohn = true; } if (cRichard.Equals(ans[new Variable("x")])) { gotRichard = true; } } Assert.IsTrue(gotJohn); Assert.IsTrue(gotRichard); }