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

testHornClauseKBRingOfThievesQuerySkisXReturnsNancyRedBertDrew() protected method

protected testHornClauseKBRingOfThievesQuerySkisXReturnsNancyRedBertDrew ( InferenceProcedure infp ) : void
infp InferenceProcedure
return void
        protected void testHornClauseKBRingOfThievesQuerySkisXReturnsNancyRedBertDrew(
                InferenceProcedure infp)
        {
            FOLKnowledgeBase rotkb = FOLKnowledgeBaseFactory
                    .createRingOfThievesKnowledgeBase(infp);
            List<Term> terms = new List<Term>();
            terms.Add(new Variable("x"));
            Predicate query = new Predicate("Skis", terms);

            InferenceResult answer = rotkb.ask(query);

            Assert.IsTrue(null != answer);
            Assert.IsFalse(answer.isPossiblyFalse());
            Assert.IsTrue(answer.isTrue());
            Assert.IsFalse(answer.isUnknownDueToTimeout());
            // DB can expand infinitely so is only partial.
            Assert.IsTrue(answer.isPartialResultDueToTimeout());
            Assert.AreEqual(4, answer.getProofs().Count);
            Assert.AreEqual(1, answer.getProofs()[0].getAnswerBindings()
                    .Count);
            Assert.AreEqual(1, answer.getProofs()[1].getAnswerBindings()
                    .Count);
            Assert.AreEqual(1, answer.getProofs()[2].getAnswerBindings()
                    .Count);
            Assert.AreEqual(1, answer.getProofs()[3].getAnswerBindings()
                    .Count);

            List<Constant> expected = new List<Constant>();
            expected.Add(new Constant("Nancy"));
            expected.Add(new Constant("Red"));
            expected.Add(new Constant("Bert"));
            expected.Add(new Constant("Drew"));
            foreach (Proof p in answer.getProofs())
            {
                expected.Remove((Constant)p.getAnswerBindings()[new Variable("x")]);
            }
            Assert.AreEqual(0, expected.Count);
        }