package aima.test.core.unit.logic.fol;
import java.util.Set;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import aima.core.logic.fol.VariableCollector;
import aima.core.logic.fol.domain.DomainFactory;
import aima.core.logic.fol.parsing.FOLParser;
import aima.core.logic.fol.parsing.ast.Variable;
/**
* @author Ravi Mohan
*
*/
public class VariableCollectorTest {
FOLParser parser;
VariableCollector vc;
@Before
public void setUp() {
parser = new FOLParser(DomainFactory.crusadesDomain());
vc = new VariableCollector();
}
@Test
public void testSimplepredicate() {
Set<Variable> variables = vc.collectAllVariables(parser
.parse("King(x)"));
Assert.assertEquals(1, variables.size());
Assert.assertTrue(variables.contains(new Variable("x")));
}
@Test
public void testMultipleVariables() {
Set<Variable> variables = vc.collectAllVariables(parser
.parse("BrotherOf(x) = EnemyOf(y)"));
Assert.assertEquals(2, variables.size());
Assert.assertTrue(variables.contains(new Variable("x")));
Assert.assertTrue(variables.contains(new Variable("y")));
}
@Test
public void testQuantifiedVariables() {
// Note: Should collect quantified variables
// even if not mentioned in clause.
Set<Variable> variables = vc.collectAllVariables(parser
.parse("FORALL x,y,z (BrotherOf(x) = EnemyOf(y))"));
Assert.assertEquals(3, variables.size());
Assert.assertTrue(variables.contains(new Variable("x")));
Assert.assertTrue(variables.contains(new Variable("y")));
Assert.assertTrue(variables.contains(new Variable("z")));
}
}