package aima.test.core.unit.logic.propositional.parsing;
import org.junit.Assert;
import org.junit.Test;
import aima.core.logic.common.LogicTokenTypes;
import aima.core.logic.common.Token;
import aima.core.logic.propositional.parsing.PELexer;
/**
* @author Ravi Mohan
*
*/
public class PELexerTest {
@Test
public void testLexBasicExpression() {
PELexer pelexer = new PELexer();
pelexer.setInput("(P)");
Assert.assertEquals(new Token(LogicTokenTypes.LPAREN, "("),
pelexer.nextToken());
Assert.assertEquals(new Token(LogicTokenTypes.SYMBOL, "P"),
pelexer.nextToken());
Assert.assertEquals(new Token(LogicTokenTypes.RPAREN, ")"),
pelexer.nextToken());
Assert.assertEquals(new Token(LogicTokenTypes.EOI, "EOI"),
pelexer.nextToken());
}
@Test
public void testLexNotExpression() {
PELexer pelexer = new PELexer();
pelexer.setInput("(NOT P)");
Assert.assertEquals(new Token(LogicTokenTypes.LPAREN, "("),
pelexer.nextToken());
Assert.assertEquals(new Token(LogicTokenTypes.CONNECTOR, "NOT"),
pelexer.nextToken());
Assert.assertEquals(new Token(LogicTokenTypes.SYMBOL, "P"),
pelexer.nextToken());
Assert.assertEquals(new Token(LogicTokenTypes.RPAREN, ")"),
pelexer.nextToken());
Assert.assertEquals(new Token(LogicTokenTypes.EOI, "EOI"),
pelexer.nextToken());
}
@Test
public void testLexImpliesExpression() {
PELexer pelexer = new PELexer();
pelexer.setInput("(P => Q)");
Assert.assertEquals(new Token(LogicTokenTypes.LPAREN, "("),
pelexer.nextToken());
Assert.assertEquals(new Token(LogicTokenTypes.SYMBOL, "P"),
pelexer.nextToken());
Assert.assertEquals(new Token(LogicTokenTypes.CONNECTOR, "=>"),
pelexer.nextToken());
}
@Test
public void testLexBiCOnditionalExpression() {
PELexer pelexer = new PELexer();
pelexer.setInput("(B11 <=> (P12 OR P21))");
Assert.assertEquals(new Token(LogicTokenTypes.LPAREN, "("),
pelexer.nextToken());
Assert.assertEquals(new Token(LogicTokenTypes.SYMBOL, "B11"),
pelexer.nextToken());
Assert.assertEquals(new Token(LogicTokenTypes.CONNECTOR, "<=>"),
pelexer.nextToken());
}
}