package test.klq.ast; import com.klq.ast.impl.expr.AExpression; import com.klq.ast.impl.expr.bool.*; import com.klq.ast.impl.expr.literal.BooleanNode; import com.klq.ast.impl.expr.literal.NumberNode; import com.klq.ast.impl.expr.math.*; import org.junit.Before; import org.junit.Test; import static org.junit.Assert.assertEquals; import java.math.BigDecimal; /** * Created by Juriaan on 7-3-2015. */ public class EvaluationTest { private AExpression left; private AExpression right; @Before public void setUp() throws Exception { left = new NumberNode(BigDecimal.valueOf(20)); right = new NumberNode(BigDecimal.valueOf(10)); } @Test public void testAdd() throws Exception { AExpression expr = new AddNode(left, right); assertEquals(new BigDecimal("30"), expr.evaluate(null).getValue()); } @Test public void testSubtract() throws Exception { AExpression expr = new SubtractNode(left, right); assertEquals(new BigDecimal("10"), expr.evaluate(null).getValue()); } @Test public void testMultiply() throws Exception { AExpression expr = new MultiplyNode(left, right); assertEquals(new BigDecimal("200"), expr.evaluate(null).getValue()); } @Test public void testDivide() throws Exception { AExpression expr = new DivideNode(left, right); assertEquals(new BigDecimal("2"), expr.evaluate(null).getValue()); } @Test public void testGreaterThan() throws Exception { AExpression expr = new GreaterThanNode(left, right); assertEquals(true, expr.evaluate(null).getValue()); expr = new GreaterThanNode(right, left); assertEquals(false, expr.evaluate(null).getValue()); } @Test public void testGreaterEquals() throws Exception { AExpression expr = new GreaterEqualsNode(left, right); assertEquals(true, expr.evaluate(null).getValue()); expr = new GreaterEqualsNode(right, left); assertEquals(false, expr.evaluate(null).getValue()); expr = new GreaterEqualsNode(left, new NumberNode(new BigDecimal("20"))); assertEquals(true, expr.evaluate(null).getValue()); } @Test public void testLessThan() throws Exception { AExpression expr = new LessThanNode(left, right); assertEquals(false, expr.evaluate(null).getValue()); expr = new LessThanNode(right, left); assertEquals(true, expr.evaluate(null).getValue()); } @Test public void testLessEquals() throws Exception { AExpression expr = new LessEqualsNode(left, right); assertEquals(false, expr.evaluate(null).getValue()); expr = new LessEqualsNode(right, left); assertEquals(true, expr.evaluate(null).getValue()); expr = new LessEqualsNode(left, new NumberNode(new BigDecimal("20"))); assertEquals(true, expr.evaluate(null).getValue()); } @Test public void testEquals() throws Exception { AExpression expr = new EqualsNode(left, right); assertEquals(false, expr.evaluate(null).getValue()); expr = new EqualsNode(left, new NumberNode(new BigDecimal("20"))); assertEquals(true, expr.evaluate(null).getValue()); } @Test public void testNotEquals() throws Exception { AExpression expr = new NotEqualsNode(left, right); assertEquals(true, expr.evaluate(null).getValue()); expr = new NotEqualsNode(left, new NumberNode(new BigDecimal("20"))); assertEquals(false, expr.evaluate(null).getValue()); } @Test public void testAndOr() throws Exception { BooleanNode trueNode = new BooleanNode(true); BooleanNode falseNode = new BooleanNode(false); AExpression expr = new AndNode(trueNode, trueNode); assertEquals(true, expr.evaluate(null).getValue()); expr = new AndNode(trueNode, falseNode); assertEquals(false, expr.evaluate(null).getValue()); expr = new AndNode(trueNode, falseNode); assertEquals(false, expr.evaluate(null).getValue()); expr = new AndNode(falseNode, falseNode); assertEquals(false, expr.evaluate(null).getValue()); expr = new OrNode(trueNode, trueNode); assertEquals(true, expr.evaluate(null).getValue()); expr = new OrNode(trueNode, falseNode); assertEquals(true, expr.evaluate(null).getValue()); expr = new OrNode(falseNode, trueNode); assertEquals(true, expr.evaluate(null).getValue()); expr = new OrNode(falseNode, falseNode); assertEquals(false, expr.evaluate(null).getValue()); } @Test public void testDeepEvaluation() throws Exception { AExpression child1 = new NumberNode(new BigDecimal("10")); AExpression child2 = new NumberNode(new BigDecimal("20")); AExpression child3 = new NumberNode(new BigDecimal("35")); AExpression child4 = new NumberNode(new BigDecimal("7")); AddNode add = new AddNode(child1, child2); //30 SubtractNode sub = new SubtractNode(child3, child4); //28 GreaterThanNode gt = new GreaterThanNode(add, sub); assertEquals(true, gt.evaluate(null).getValue()); } @Test public void testUndefined() throws Exception { // AValueNode child1 = new BooleanNode(true); // AValueNode child2 = new UndefinedNode(); // // AndNode and = new AndNode(child1, child2); // assertEquals("Undefined", and.evaluate(null).getValue()); } }