package aima.test.core.unit.logic.fol.kb.data;
import java.util.ArrayList;
import java.util.List;
import org.junit.Assert;
import org.junit.Test;
import aima.core.logic.fol.kb.data.Chain;
import aima.core.logic.fol.kb.data.Literal;
import aima.core.logic.fol.parsing.ast.Predicate;
import aima.core.logic.fol.parsing.ast.Term;
/**
* @author Ciaran O'Reilly
*
*/
public class ChainTest {
@Test
public void testIsEmpty() {
Chain c = new Chain();
Assert.assertTrue(c.isEmpty());
c.addLiteral(new Literal(new Predicate("P", new ArrayList<Term>())));
Assert.assertFalse(c.isEmpty());
List<Literal> lits = new ArrayList<Literal>();
lits.add(new Literal(new Predicate("P", new ArrayList<Term>())));
c = new Chain(lits);
Assert.assertFalse(c.isEmpty());
}
@Test
public void testContrapositives() {
List<Chain> conts;
Literal p = new Literal(new Predicate("P", new ArrayList<Term>()));
Literal notq = new Literal(new Predicate("Q", new ArrayList<Term>()),
true);
Literal notr = new Literal(new Predicate("R", new ArrayList<Term>()),
true);
Chain c = new Chain();
conts = c.getContrapositives();
Assert.assertEquals(0, conts.size());
c.addLiteral(p);
conts = c.getContrapositives();
Assert.assertEquals(0, conts.size());
c.addLiteral(notq);
conts = c.getContrapositives();
Assert.assertEquals(1, conts.size());
Assert.assertEquals("<~Q(),P()>", conts.get(0).toString());
c.addLiteral(notr);
conts = c.getContrapositives();
Assert.assertEquals(2, conts.size());
Assert.assertEquals("<~Q(),P(),~R()>", conts.get(0).toString());
Assert.assertEquals("<~R(),P(),~Q()>", conts.get(1).toString());
}
}