AIMA.Test.Core.Unit.Logic.FOL.CommonFOLInferenceProcedureTests.testDefiniteClauseKBKingsQueryKingXReturnsJohnAndRichardSucceeds C# (CSharp) Method

testDefiniteClauseKBKingsQueryKingXReturnsJohnAndRichardSucceeds() protected method

protected testDefiniteClauseKBKingsQueryKingXReturnsJohnAndRichardSucceeds ( InferenceProcedure infp ) : void
infp InferenceProcedure
return void
        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);
        }