Package aima.test.core.unit.logic.fol.kb

Source Code of aima.test.core.unit.logic.fol.kb.FOLKnowledgeBaseTest

package aima.test.core.unit.logic.fol.kb;

import java.util.ArrayList;
import java.util.List;

import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;

import aima.core.logic.fol.StandardizeApartIndexicalFactory;
import aima.core.logic.fol.domain.DomainFactory;
import aima.core.logic.fol.kb.FOLKnowledgeBase;
import aima.core.logic.fol.kb.data.Clause;
import aima.core.logic.fol.kb.data.Literal;
import aima.core.logic.fol.parsing.ast.Predicate;
import aima.core.logic.fol.parsing.ast.Term;
import aima.core.logic.fol.parsing.ast.Variable;

/**
* @author Ravi Mohan
* @author Ciaran O'Reilly
*
*/
public class FOLKnowledgeBaseTest {

  private FOLKnowledgeBase weaponsKB, kingsKB;

  @Before
  public void setUp() {
    StandardizeApartIndexicalFactory.flush();

    weaponsKB = new FOLKnowledgeBase(DomainFactory.weaponsDomain());

    kingsKB = new FOLKnowledgeBase(DomainFactory.kingsDomain());
  }

  @Test
  public void testAddRuleAndFact() {
    weaponsKB.tell("(Missile(x) => Weapon(x))");
    Assert.assertEquals(1, weaponsKB.getNumberRules());
    weaponsKB.tell("American(West)");
    Assert.assertEquals(1, weaponsKB.getNumberRules());
    Assert.assertEquals(1, weaponsKB.getNumberFacts());
  }

  @Test
  public void testAddComplexRule() {
    weaponsKB
        .tell("( (((American(x) AND Weapon(y)) AND Sells(x,y,z)) AND Hostile(z)) => Criminal(x))");
    Assert.assertEquals(1, weaponsKB.getNumberRules());
    weaponsKB.tell("American(West)");
    Assert.assertEquals(1, weaponsKB.getNumberRules());

    List<Term> terms = new ArrayList<Term>();
    terms.add(new Variable("v0"));

    Clause dcRule = weaponsKB.getAllDefiniteClauseImplications().get(0);
    Assert.assertNotNull(dcRule);
    Assert.assertEquals(true, dcRule.isImplicationDefiniteClause());
    Assert.assertEquals(new Literal(new Predicate("Criminal", terms)),
        dcRule.getPositiveLiterals().get(0));
  }

  @Test
  public void testFactNotAddedWhenAlreadyPresent() {
    kingsKB.tell("((King(x) AND Greedy(x)) => Evil(x))");
    kingsKB.tell("King(John)");
    kingsKB.tell("King(Richard)");
    kingsKB.tell("Greedy(John)");

    Assert.assertEquals(1, kingsKB.getNumberRules());
    Assert.assertEquals(3, kingsKB.getNumberFacts());

    kingsKB.tell("King(John)");
    kingsKB.tell("King(Richard)");
    kingsKB.tell("Greedy(John)");

    Assert.assertEquals(1, kingsKB.getNumberRules());
    Assert.assertEquals(3, kingsKB.getNumberFacts());

    kingsKB.tell("(((King(John))))");
    kingsKB.tell("(((King(Richard))))");
    kingsKB.tell("(((Greedy(John))))");

    Assert.assertEquals(1, kingsKB.getNumberRules());
    Assert.assertEquals(3, kingsKB.getNumberFacts());
  }
}
TOP

Related Classes of aima.test.core.unit.logic.fol.kb.FOLKnowledgeBaseTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.