diff --git a/src/main/java/com/github/sidhant92/boolparser/parser/antlr/BooleanFilterListener.java b/src/main/java/com/github/sidhant92/boolparser/parser/antlr/BooleanFilterListener.java index 9c01395..56cdf26 100644 --- a/src/main/java/com/github/sidhant92/boolparser/parser/antlr/BooleanFilterListener.java +++ b/src/main/java/com/github/sidhant92/boolparser/parser/antlr/BooleanFilterListener.java @@ -62,7 +62,7 @@ public void exitArithmeticExpression(BooleanExpressionParser.ArithmeticExpressio @Override public void exitUnaryArithmeticExpression(BooleanExpressionParser.UnaryArithmeticExpressionContext ctx) { - final Node leafNode = !currentNodes.isEmpty() ? currentNodes.pop() : mapTypesExpressionContext( + final Node leafNode = !currentNodes.isEmpty() && currentNodes.peek() instanceof ArithmeticNode ? currentNodes.pop() : mapTypesExpressionContext( (BooleanExpressionParser.TypesExpressionContext) ctx.exp); currentNodes.add(ArithmeticNode.builder().left(leafNode).operator(Operator.UNARY).build()); super.enterUnaryArithmeticExpression(ctx); diff --git a/src/test/java/com/github/sidhant92/boolparser/application/BooleanExpressionEvaluatorTest.java b/src/test/java/com/github/sidhant92/boolparser/application/BooleanExpressionEvaluatorTest.java index 755e6c1..80947a2 100644 --- a/src/test/java/com/github/sidhant92/boolparser/application/BooleanExpressionEvaluatorTest.java +++ b/src/test/java/com/github/sidhant92/boolparser/application/BooleanExpressionEvaluatorTest.java @@ -587,6 +587,15 @@ public void testComparisonWithArithmeticFalseCondition1() { assertFalse(booleanOptional.get()); } + @Test + public void testNegativeComparison() { + final Map data = new HashMap<>(); + data.put("a", -6); + final Try resultOptional = booleanExpressionEvaluator.evaluate("a > -10 AND a < -2", data); + assertTrue(resultOptional.isSuccess()); + assertEquals(resultOptional.get(), true); + } + @Test public void testNullCheck() { final Map data = new HashMap<>();