package aima.test.core.unit.logic.propositional.kb.data;
import org.junit.Assert;
import org.junit.Test;
import aima.core.logic.propositional.kb.data.Literal;
import aima.core.logic.propositional.parsing.ast.PropositionSymbol;
/**
*
* @author Ciaran O'Reilly
*
*/
public class LiteralTest {
private final PropositionSymbol SYMBOL_P = new PropositionSymbol("P");
private final PropositionSymbol SYMBOL_Q = new PropositionSymbol("Q");
@Test
public void testIsPositiveLiteral() {
Literal literal = new Literal(SYMBOL_P);
Assert.assertTrue(literal.isPositiveLiteral());
literal = new Literal(SYMBOL_P, true);
Assert.assertTrue(literal.isPositiveLiteral());
literal = new Literal(SYMBOL_P, false);
Assert.assertFalse(literal.isPositiveLiteral());
}
@Test
public void testIsNegativeLiteral() {
Literal literal = new Literal(SYMBOL_P);
Assert.assertFalse(literal.isNegativeLiteral());
literal = new Literal(SYMBOL_P, true);
Assert.assertFalse(literal.isNegativeLiteral());
literal = new Literal(SYMBOL_P, false);
Assert.assertTrue(literal.isNegativeLiteral());
}
@Test
public void testGetAtomicSentence() {
Literal literal = new Literal(SYMBOL_P);
Assert.assertSame(literal.getAtomicSentence(), SYMBOL_P);
}
@Test
public void testIsAlwaysTrue() {
Literal literal = new Literal(SYMBOL_P);
Assert.assertFalse(literal.isAlwaysTrue());
literal = new Literal(PropositionSymbol.TRUE);
Assert.assertTrue(literal.isAlwaysTrue());
literal = new Literal(PropositionSymbol.TRUE, false);
Assert.assertFalse(literal.isAlwaysTrue());
literal = new Literal(PropositionSymbol.FALSE);
Assert.assertFalse(literal.isAlwaysTrue());
literal = new Literal(PropositionSymbol.FALSE, false);
Assert.assertTrue(literal.isAlwaysTrue());
}
@Test
public void testIsAlwaysFalse() {
Literal literal = new Literal(SYMBOL_P);
Assert.assertFalse(literal.isAlwaysFalse());
literal = new Literal(PropositionSymbol.TRUE);
Assert.assertFalse(literal.isAlwaysFalse());
literal = new Literal(PropositionSymbol.TRUE, false);
Assert.assertTrue(literal.isAlwaysFalse());
literal = new Literal(PropositionSymbol.FALSE);
Assert.assertTrue(literal.isAlwaysFalse());
literal = new Literal(PropositionSymbol.FALSE, false);
Assert.assertFalse(literal.isAlwaysFalse());
}
@Test
public void testToString() {
Literal literal = new Literal(SYMBOL_P);
Assert.assertEquals("P", literal.toString());
literal = new Literal(SYMBOL_P, false);
Assert.assertEquals("~P", literal.toString());
}
@Test
public void testEquals() {
Literal literal1 = new Literal(SYMBOL_P);
Literal literal2 = new Literal(SYMBOL_P);
Assert.assertTrue(literal1.equals(literal2));
literal1 = new Literal(SYMBOL_P, false);
literal2 = new Literal(SYMBOL_P, false);
Assert.assertTrue(literal1.equals(literal2));
literal1 = new Literal(SYMBOL_P);
literal2 = new Literal(SYMBOL_P, false);
Assert.assertFalse(literal1.equals(literal2));
literal1 = new Literal(SYMBOL_P);
literal2 = new Literal(SYMBOL_Q);
Assert.assertFalse(literal1.equals(literal2));
literal1 = new Literal(SYMBOL_P);
Assert.assertFalse(literal1.equals(SYMBOL_P));
}
@Test
public void testHashCode() {
Literal literal1 = new Literal(SYMBOL_P);
Literal literal2 = new Literal(SYMBOL_P);
Assert.assertTrue(literal1.hashCode() == literal2.hashCode());
literal1 = new Literal(SYMBOL_P, false);
literal2 = new Literal(SYMBOL_P, false);
Assert.assertTrue(literal1.hashCode() == literal2.hashCode());
literal1 = new Literal(SYMBOL_P);
literal2 = new Literal(SYMBOL_P, false);
Assert.assertFalse(literal1.hashCode() == literal2.hashCode());
}
}