From 5cf9ac54593264c5abad2cd0271191e157009a26 Mon Sep 17 00:00:00 2001 From: Sidhant Aggarwal <10743214+sidhant92@users.noreply.github.com> Date: Sat, 24 Aug 2024 11:45:15 +0530 Subject: [PATCH] fix negative comparison --- .../boolparser/parser/antlr/BooleanFilterListener.java | 2 +- .../application/BooleanExpressionEvaluatorTest.java | 9 +++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) 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<>();