package org.nlamah.QL;
import org.nlamah.QBase.QBaseTestCase;
import org.nlamah.QBase.Tools.AntlrTools;
import org.nlamah.QL.Model.Expression.Abstract.Expression;
import org.nlamah.QL.Model.Expression.Binary.AddExpression;
import org.nlamah.QL.Model.Expression.Binary.AndExpression;
import org.nlamah.QL.Model.Expression.Binary.EqualExpression;
import org.nlamah.QL.Model.Expression.Binary.GreaterThanEqualExpression;
import org.nlamah.QL.Model.Expression.Binary.GreaterThanExpression;
import org.nlamah.QL.Model.Expression.Binary.OrExpression;
import org.nlamah.QL.Model.Expression.Binary.SmallerThanEqualExpression;
import org.nlamah.QL.Model.Expression.Binary.SmallerThanExpression;
import org.nlamah.QL.Model.Expression.Binary.SubtractExpression;
import org.nlamah.QL.Model.Expression.Binary.UnEqualExpression;
import org.nlamah.QL.Model.Expression.Evaluation.ExpressionEvaluator;
import org.nlamah.QL.Model.Expression.Literal.BooleanLiteral;
import org.nlamah.QL.Model.Expression.Literal.NumberLiteral;
import org.nlamah.QL.Model.Expression.Literal.TextLiteral;
public class QLLogicalExpressionTest extends QBaseTestCase
{
public void testBoolenLiteral1()
{
Expression parsedExpression = AntlrTools.createQLExpressionFromString("yes");
Expression referenceExpression = new BooleanLiteral(true);
assertEquals(parsedExpression, referenceExpression);
assertEquals(parsedExpression.accept(new ExpressionEvaluator()), referenceExpression.accept(new ExpressionEvaluator()));
assertEquals(parsedExpression.accept(new ExpressionEvaluator()), new BooleanLiteral(true));
}
public void testBoolenLiteral2()
{
Expression parsedExpression = AntlrTools.createQLExpressionFromString("no");
Expression referenceExpression = new BooleanLiteral(false);
assertEquals(parsedExpression, referenceExpression);
assertEquals(parsedExpression.accept(new ExpressionEvaluator()), referenceExpression.accept(new ExpressionEvaluator()));
assertEquals(parsedExpression.accept(new ExpressionEvaluator()), new BooleanLiteral(false));
}
public void testAndOperation1()
{
Expression parsedExpression = AntlrTools.createQLExpressionFromString("yes && no");
BooleanLiteral booleanLiteral1 = new BooleanLiteral(true);
BooleanLiteral booleanLiteral2 = new BooleanLiteral(false);
Expression referenceExpression = new AndExpression(booleanLiteral1, booleanLiteral2);
assertEquals(parsedExpression, referenceExpression);
assertEquals(parsedExpression.accept(new ExpressionEvaluator()), referenceExpression.accept(new ExpressionEvaluator()));
assertEquals(parsedExpression.accept(new ExpressionEvaluator()), new BooleanLiteral(false));
}
public void testAndOperation2()
{
Expression parsedExpression = AntlrTools.createQLExpressionFromString("yes && yes");
BooleanLiteral booleanLiteral1 = new BooleanLiteral(true);
BooleanLiteral booleanLiteral2 = new BooleanLiteral(true);
Expression referenceExpression = new AndExpression(booleanLiteral1, booleanLiteral2);
assertEquals(parsedExpression, referenceExpression);
assertEquals(parsedExpression.accept(new ExpressionEvaluator()), referenceExpression.accept(new ExpressionEvaluator()));
assertEquals(parsedExpression.accept(new ExpressionEvaluator()), new BooleanLiteral(true));
}
public void testAndOperation3()
{
Expression parsedExpression = AntlrTools.createQLExpressionFromString("no && no");
BooleanLiteral booleanLiteral1 = new BooleanLiteral(false);
BooleanLiteral booleanLiteral2 = new BooleanLiteral(false);
Expression referenceExpression = new AndExpression(booleanLiteral1, booleanLiteral2);
assertEquals(parsedExpression, referenceExpression);
assertEquals(parsedExpression.accept(new ExpressionEvaluator()), referenceExpression.accept(new ExpressionEvaluator()));
assertEquals(parsedExpression.accept(new ExpressionEvaluator()), new BooleanLiteral(false));
}
public void testOrOperation1()
{
Expression parsedExpression = AntlrTools.createQLExpressionFromString("yes || no");
BooleanLiteral booleanLiteral1 = new BooleanLiteral(true);
BooleanLiteral booleanLiteral2 = new BooleanLiteral(false);
Expression referenceExpression = new OrExpression(booleanLiteral1, booleanLiteral2);
assertEquals(parsedExpression, referenceExpression);
assertEquals(parsedExpression.accept(new ExpressionEvaluator()), referenceExpression.accept(new ExpressionEvaluator()));
assertEquals(parsedExpression.accept(new ExpressionEvaluator()), new BooleanLiteral(true));
}
public void testOrOperation2()
{
Expression parsedExpression = AntlrTools.createQLExpressionFromString("no || no");
BooleanLiteral booleanLiteral1 = new BooleanLiteral(false);
BooleanLiteral booleanLiteral2 = new BooleanLiteral(false);
Expression referenceExpression = new OrExpression(booleanLiteral1, booleanLiteral2);
assertEquals(parsedExpression, referenceExpression);
assertEquals(parsedExpression.accept(new ExpressionEvaluator()), referenceExpression.accept(new ExpressionEvaluator()));
assertEquals(parsedExpression.accept(new ExpressionEvaluator()), new BooleanLiteral(false));
}
public void testOrOperation3()
{
Expression parsedExpression = AntlrTools.createQLExpressionFromString("yes || yes");
BooleanLiteral booleanLiteral1 = new BooleanLiteral(true);
BooleanLiteral booleanLiteral2 = new BooleanLiteral(true);
Expression referenceExpression = new OrExpression(booleanLiteral1, booleanLiteral2);
assertEquals(parsedExpression, referenceExpression);
assertEquals(parsedExpression.accept(new ExpressionEvaluator()), referenceExpression.accept(new ExpressionEvaluator()));
assertEquals(parsedExpression.accept(new ExpressionEvaluator()), new BooleanLiteral(true));
}
public void testSmallerThanOperation1()
{
Expression parsedExpression = AntlrTools.createQLExpressionFromString("1 < 2");
NumberLiteral numberLiteral1 = new NumberLiteral(1);
NumberLiteral numberLiteral2 = new NumberLiteral(2);
Expression referenceExpression = new SmallerThanExpression(numberLiteral1, numberLiteral2);
assertEquals(parsedExpression, referenceExpression);
assertEquals(parsedExpression.accept(new ExpressionEvaluator()), referenceExpression.accept(new ExpressionEvaluator()));
assertEquals(parsedExpression.accept(new ExpressionEvaluator()), new BooleanLiteral(true));
}
public void testSmallerThanOperation2()
{
Expression parsedExpression = AntlrTools.createQLExpressionFromString("2 < 1");
NumberLiteral numberLiteral1 = new NumberLiteral(2);
NumberLiteral numberLiteral2 = new NumberLiteral(1);
Expression referenceExpression = new SmallerThanExpression(numberLiteral1, numberLiteral2);
assertEquals(parsedExpression, referenceExpression);
assertEquals(parsedExpression.accept(new ExpressionEvaluator()), referenceExpression.accept(new ExpressionEvaluator()));
assertEquals(parsedExpression.accept(new ExpressionEvaluator()), new BooleanLiteral(false));
}
public void testSmallerThanEqualOperation1()
{
Expression parsedExpression = AntlrTools.createQLExpressionFromString("1 <= 1");
NumberLiteral numberLiteral1 = new NumberLiteral(1);
NumberLiteral numberLiteral2 = new NumberLiteral(1);
Expression referenceExpression = new SmallerThanEqualExpression(numberLiteral1, numberLiteral2);
assertEquals(parsedExpression, referenceExpression);
assertEquals(parsedExpression.accept(new ExpressionEvaluator()), referenceExpression.accept(new ExpressionEvaluator()));
assertEquals(parsedExpression.accept(new ExpressionEvaluator()), new BooleanLiteral(true));
}
public void testSmallerThanEqualOperation2()
{
Expression parsedExpression = AntlrTools.createQLExpressionFromString("2 <= 1");
NumberLiteral numberLiteral1 = new NumberLiteral(2);
NumberLiteral numberLiteral2 = new NumberLiteral(1);
Expression referenceExpression = new SmallerThanEqualExpression(numberLiteral1, numberLiteral2);
assertEquals(parsedExpression, referenceExpression);
assertEquals(parsedExpression.accept(new ExpressionEvaluator()), referenceExpression.accept(new ExpressionEvaluator()));
assertEquals(parsedExpression.accept(new ExpressionEvaluator()), new BooleanLiteral(false));
}
public void testGreaterThanOperation1()
{
Expression parsedExpression = AntlrTools.createQLExpressionFromString("2 > 1");
NumberLiteral numberLiteral1 = new NumberLiteral(2);
NumberLiteral numberLiteral2 = new NumberLiteral(1);
Expression referenceExpression = new GreaterThanExpression(numberLiteral1, numberLiteral2);
assertEquals(parsedExpression, referenceExpression);
assertEquals(parsedExpression.accept(new ExpressionEvaluator()), referenceExpression.accept(new ExpressionEvaluator()));
assertEquals(parsedExpression.accept(new ExpressionEvaluator()), new BooleanLiteral(true));
}
public void testGreaterThanOperation2()
{
Expression parsedExpression = AntlrTools.createQLExpressionFromString("1 > 2");
NumberLiteral numberLiteral1 = new NumberLiteral(1);
NumberLiteral numberLiteral2 = new NumberLiteral(2);
Expression referenceExpression = new GreaterThanExpression(numberLiteral1, numberLiteral2);
assertEquals(parsedExpression, referenceExpression);
assertEquals(parsedExpression.accept(new ExpressionEvaluator()), referenceExpression.accept(new ExpressionEvaluator()));
assertEquals(parsedExpression.accept(new ExpressionEvaluator()), new BooleanLiteral(false));
}
public void testGreaterThanOperation3()
{
Expression parsedExpression = AntlrTools.createQLExpressionFromString("1+2 > 3");
NumberLiteral numberLiteral1 = new NumberLiteral(1);
NumberLiteral numberLiteral2 = new NumberLiteral(2);
NumberLiteral numberLiteral3 = new NumberLiteral(3);
AddExpression addExpression = new AddExpression(numberLiteral1, numberLiteral2);
Expression referenceExpression = new GreaterThanExpression(addExpression, numberLiteral3);
assertEquals(parsedExpression, referenceExpression);
assertEquals(parsedExpression.accept(new ExpressionEvaluator()), referenceExpression.accept(new ExpressionEvaluator()));
assertEquals(parsedExpression.accept(new ExpressionEvaluator()), new BooleanLiteral(false));
}
public void testGreaterThanEqualOperation1()
{
Expression parsedExpression = AntlrTools.createQLExpressionFromString("1 >= 1");
NumberLiteral numberLiteral1 = new NumberLiteral(1);
NumberLiteral numberLiteral2 = new NumberLiteral(1);
Expression referenceExpression = new GreaterThanEqualExpression(numberLiteral1, numberLiteral2);
assertEquals(parsedExpression, referenceExpression);
assertEquals(parsedExpression.accept(new ExpressionEvaluator()), referenceExpression.accept(new ExpressionEvaluator()));
assertEquals(parsedExpression.accept(new ExpressionEvaluator()), new BooleanLiteral(true));
}
public void testGreaterThanEqualOperation2()
{
Expression parsedExpression = AntlrTools.createQLExpressionFromString("1 >= 2");
NumberLiteral numberLiteral1 = new NumberLiteral(1);
NumberLiteral numberLiteral2 = new NumberLiteral(2);
Expression referenceExpression = new GreaterThanEqualExpression(numberLiteral1, numberLiteral2);
assertEquals(parsedExpression, referenceExpression);
assertEquals(parsedExpression.accept(new ExpressionEvaluator()), referenceExpression.accept(new ExpressionEvaluator()));
assertEquals(parsedExpression.accept(new ExpressionEvaluator()), new BooleanLiteral(false));
}
public void testEqualOperation1()
{
Expression parsedExpression = AntlrTools.createQLExpressionFromString("1 == 1");
NumberLiteral numberLiteral1 = new NumberLiteral(1);
NumberLiteral numberLiteral2 = new NumberLiteral(1);
Expression referenceExpression = new EqualExpression(numberLiteral1, numberLiteral2);
assertEquals(parsedExpression, referenceExpression);
assertEquals(parsedExpression.accept(new ExpressionEvaluator()), referenceExpression.accept(new ExpressionEvaluator()));
assertEquals(parsedExpression.accept(new ExpressionEvaluator()), new BooleanLiteral(true));
}
public void testEqualOperation2()
{
Expression parsedExpression = AntlrTools.createQLExpressionFromString("1 == 2");
NumberLiteral numberLiteral1 = new NumberLiteral(1);
NumberLiteral numberLiteral2 = new NumberLiteral(2);
Expression referenceExpression = new EqualExpression(numberLiteral1, numberLiteral2);
assertEquals(parsedExpression, referenceExpression);
assertEquals(parsedExpression.accept(new ExpressionEvaluator()), referenceExpression.accept(new ExpressionEvaluator()));
assertEquals(parsedExpression.accept(new ExpressionEvaluator()), new BooleanLiteral(false));
}
public void testEqualOperation3()
{
Expression parsedExpression = AntlrTools.createQLExpressionFromString("1 + 2 == 3");
NumberLiteral numberLiteral1 = new NumberLiteral(1);
NumberLiteral numberLiteral2 = new NumberLiteral(2);
NumberLiteral numberLiteral3 = new NumberLiteral(3);
AddExpression addExpression = new AddExpression(numberLiteral1, numberLiteral2);
Expression referenceExpression = new EqualExpression(addExpression, numberLiteral3);
assertEquals(parsedExpression, referenceExpression);
assertEquals(parsedExpression.accept(new ExpressionEvaluator()), referenceExpression.accept(new ExpressionEvaluator()));
assertEquals(parsedExpression.accept(new ExpressionEvaluator()), new BooleanLiteral(true));
}
public void testEqualOperation4()
{
Expression parsedExpression = AntlrTools.createQLExpressionFromString("3 == 1 + 2");
NumberLiteral numberLiteral1 = new NumberLiteral(3);
NumberLiteral numberLiteral2 = new NumberLiteral(1);
NumberLiteral numberLiteral3 = new NumberLiteral(2);
AddExpression addExpression = new AddExpression(numberLiteral2, numberLiteral3);
Expression referenceExpression = new EqualExpression(numberLiteral1, addExpression);
assertEquals(parsedExpression, referenceExpression);
assertEquals(parsedExpression.accept(new ExpressionEvaluator()), referenceExpression.accept(new ExpressionEvaluator()));
assertEquals(parsedExpression.accept(new ExpressionEvaluator()), new BooleanLiteral(true));
}
public void testEqualOperation5()
{
Expression parsedExpression = AntlrTools.createQLExpressionFromString("\"hello\" == \"hello\"");
TextLiteral textLiteral1 = new TextLiteral("hello");
TextLiteral textLiteral2 = new TextLiteral("hello");
Expression referenceExpression = new EqualExpression(textLiteral1, textLiteral2);
assertEquals(parsedExpression, referenceExpression);
assertEquals(parsedExpression.accept(new ExpressionEvaluator()), referenceExpression.accept(new ExpressionEvaluator()));
assertEquals(parsedExpression.accept(new ExpressionEvaluator()), new BooleanLiteral(true));
}
public void testUnequalOperation1()
{
Expression parsedExpression = AntlrTools.createQLExpressionFromString("1 != 2");
NumberLiteral numberLiteral1 = new NumberLiteral(1);
NumberLiteral numberLiteral2 = new NumberLiteral(2);
Expression referenceExpression = new UnEqualExpression(numberLiteral1, numberLiteral2);
assertEquals(parsedExpression, referenceExpression);
assertEquals(parsedExpression.accept(new ExpressionEvaluator()), referenceExpression.accept(new ExpressionEvaluator()));
assertEquals(parsedExpression.accept(new ExpressionEvaluator()), new BooleanLiteral(true));
}
public void testUnequalOperation2()
{
Expression parsedExpression = AntlrTools.createQLExpressionFromString("1 != 1");
NumberLiteral numberLiteral1 = new NumberLiteral(1);
NumberLiteral numberLiteral2 = new NumberLiteral(1);
Expression referenceExpression = new UnEqualExpression(numberLiteral1, numberLiteral2);
assertEquals(parsedExpression, referenceExpression);
assertEquals(parsedExpression.accept(new ExpressionEvaluator()), referenceExpression.accept(new ExpressionEvaluator()));
assertEquals(parsedExpression.accept(new ExpressionEvaluator()), new BooleanLiteral(false));
}
public void testUnEqualOperation3()
{
Expression parsedExpression = AntlrTools.createQLExpressionFromString("\"hello\" != \"world\"");
TextLiteral textLiteral1 = new TextLiteral("hello");
TextLiteral textLiteral2 = new TextLiteral("world");
Expression referenceExpression = new UnEqualExpression(textLiteral1, textLiteral2);
assertEquals(parsedExpression, referenceExpression);
assertEquals(parsedExpression.accept(new ExpressionEvaluator()), referenceExpression.accept(new ExpressionEvaluator()));
assertEquals(parsedExpression.accept(new ExpressionEvaluator()), new BooleanLiteral(true));
}
public void testComplexLogicalExpression1()
{
Expression parsedExpression = AntlrTools.createQLExpressionFromString("1 + 7 > 1 || 7 - 1 >= 1 - 1");
NumberLiteral numberLiteral1 = new NumberLiteral(1);
NumberLiteral numberLiteral2 = new NumberLiteral(7);
NumberLiteral numberLiteral3 = new NumberLiteral(1);
NumberLiteral numberLiteral4 = new NumberLiteral(7);
NumberLiteral numberLiteral5 = new NumberLiteral(1);
NumberLiteral numberLiteral6 = new NumberLiteral(1);
NumberLiteral numberLiteral7 = new NumberLiteral(1);
Expression addEpxression = new AddExpression(numberLiteral1, numberLiteral2);
Expression greaterThanExpression = new GreaterThanExpression(addEpxression, numberLiteral3);
Expression subtractExpression1 = new SubtractExpression(numberLiteral4,numberLiteral5);
Expression subtractExpression2 = new SubtractExpression(numberLiteral6,numberLiteral7);
Expression greaterThanEqualExpression = new GreaterThanEqualExpression(subtractExpression1, subtractExpression2);
Expression referenceExpression = new OrExpression(greaterThanExpression, greaterThanEqualExpression);
assertEquals(parsedExpression, referenceExpression);
assertEquals(parsedExpression.accept(new ExpressionEvaluator()), referenceExpression.accept(new ExpressionEvaluator()));
assertEquals(parsedExpression.accept(new ExpressionEvaluator()), new BooleanLiteral(true));
}
public void testComplexLogicalExpression2()
{
Expression parsedExpression = AntlrTools.createQLExpressionFromString("1 + 7 < 1 || 7 - 1 <= 1 - 1");
NumberLiteral numberLiteral1 = new NumberLiteral(1);
NumberLiteral numberLiteral2 = new NumberLiteral(7);
NumberLiteral numberLiteral3 = new NumberLiteral(1);
NumberLiteral numberLiteral4 = new NumberLiteral(7);
NumberLiteral numberLiteral5 = new NumberLiteral(1);
NumberLiteral numberLiteral6 = new NumberLiteral(1);
NumberLiteral numberLiteral7 = new NumberLiteral(1);
Expression addEpxression = new AddExpression(numberLiteral1, numberLiteral2);
Expression smallerThanExpression = new SmallerThanExpression(addEpxression, numberLiteral3);
Expression subtractExpression1 = new SubtractExpression(numberLiteral4,numberLiteral5);
Expression subtractExpression2 = new SubtractExpression(numberLiteral6,numberLiteral7);
Expression smallerThanEqualExpression = new SmallerThanEqualExpression(subtractExpression1, subtractExpression2);
Expression referenceExpression = new OrExpression(smallerThanExpression, smallerThanEqualExpression);
assertEquals(parsedExpression, referenceExpression);
assertEquals(parsedExpression.accept(new ExpressionEvaluator()), referenceExpression.accept(new ExpressionEvaluator()));
assertEquals(parsedExpression.accept(new ExpressionEvaluator()), new BooleanLiteral(false));
}
}