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.DivideExpression; import org.nlamah.QL.Model.Expression.Binary.MultiplyExpression; import org.nlamah.QL.Model.Expression.Binary.SubtractExpression; import org.nlamah.QL.Model.Expression.Evaluation.ExpressionEvaluator; import org.nlamah.QL.Model.Expression.Literal.NumberLiteral; public class QLComputationalExpressionTest extends QBaseTestCase { public void testNumberLiteral() { Expression parsedExpression = AntlrTools.createQLExpressionFromString("1"); Expression referenceExpression = new NumberLiteral(1); assertEquals(parsedExpression, referenceExpression); assertEquals(parsedExpression.accept(new ExpressionEvaluator()), referenceExpression.accept(new ExpressionEvaluator())); assertEquals(parsedExpression.accept(new ExpressionEvaluator()), new NumberLiteral(1)); } public void testAddition() { Expression parsedExpression = AntlrTools.createQLExpressionFromString("1 + 2"); Expression leftHandExpression = new NumberLiteral(1); Expression rightHandExpression = new NumberLiteral(2); Expression referenceExpression = new AddExpression(leftHandExpression, rightHandExpression); assertEquals(parsedExpression, referenceExpression); assertEquals(parsedExpression.accept(new ExpressionEvaluator()), referenceExpression.accept(new ExpressionEvaluator())); assertEquals(parsedExpression.accept(new ExpressionEvaluator()), new NumberLiteral(3)); } public void testSubtraction() { Expression parsedExpression = AntlrTools.createQLExpressionFromString("50 - 7"); Expression leftHandExpression = new NumberLiteral(50); Expression rightHandExpression = new NumberLiteral(7); Expression referenceExpression = new SubtractExpression(leftHandExpression, rightHandExpression); assertEquals(parsedExpression, referenceExpression); assertEquals(parsedExpression.accept(new ExpressionEvaluator()), referenceExpression.accept(new ExpressionEvaluator())); assertEquals(parsedExpression.accept(new ExpressionEvaluator()), new NumberLiteral(43)); } public void testMultiplication() { Expression parsedExpression = AntlrTools.createQLExpressionFromString("20 *1000"); Expression leftHandExpression = new NumberLiteral(20); Expression rightHandExpression = new NumberLiteral(1000); Expression referenceExpression = new MultiplyExpression(leftHandExpression, rightHandExpression); assertEquals(parsedExpression, referenceExpression); assertEquals(parsedExpression.accept(new ExpressionEvaluator()), referenceExpression.accept(new ExpressionEvaluator())); assertEquals(parsedExpression.accept(new ExpressionEvaluator()), new NumberLiteral(20000)); } public void testDivision() { Expression parsedExpression = AntlrTools.createQLExpressionFromString("7 / 9"); Expression leftHandExpression = new NumberLiteral(7); Expression rightHandExpression = new NumberLiteral(9); Expression referenceExpression = new DivideExpression(leftHandExpression, rightHandExpression); assertEquals(parsedExpression, referenceExpression); assertEquals(parsedExpression.accept(new ExpressionEvaluator()), referenceExpression.accept(new ExpressionEvaluator())); assertEquals(parsedExpression.accept(new ExpressionEvaluator()), new NumberLiteral(1)); } public void testSimpleParentheses() { Expression parsedExpression = AntlrTools.createQLExpressionFromString("(1)"); Expression referenceExpression = new NumberLiteral(1); assertEquals(parsedExpression.accept(new ExpressionEvaluator()), referenceExpression.accept(new ExpressionEvaluator())); assertEquals(parsedExpression.accept(new ExpressionEvaluator()), new NumberLiteral(1)); } public void testComplexParenthese() { Expression parsedExpression = AntlrTools.createQLExpressionFromString("(1+2)/(3-4) + (50 * (13/13))"); NumberLiteral numberLiteral1 = new NumberLiteral(1); NumberLiteral numberLiteral2 = new NumberLiteral(2); NumberLiteral numberLiteral3 = new NumberLiteral(3); NumberLiteral numberLiteral4 = new NumberLiteral(4); NumberLiteral numberLiteral5 = new NumberLiteral(50); NumberLiteral numberLiteral6 = new NumberLiteral(13); NumberLiteral numberLiteral7 = new NumberLiteral(13); Expression expression1 = new AddExpression(numberLiteral1, numberLiteral2); Expression expression2 = new SubtractExpression(numberLiteral3, numberLiteral4); Expression expression3 = new DivideExpression(expression1, expression2); Expression expression4 = new DivideExpression(numberLiteral6, numberLiteral7); Expression expression5 = new MultiplyExpression(numberLiteral5, expression4); Expression referenceExpression = new AddExpression(expression3, expression5); assertEquals(parsedExpression, referenceExpression); assertEquals(parsedExpression.accept(new ExpressionEvaluator()), referenceExpression.accept(new ExpressionEvaluator())); assertEquals(parsedExpression.accept(new ExpressionEvaluator()), new NumberLiteral(47)); } }