From a702f71e782bf2257916140ceb7db412b057f29b Mon Sep 17 00:00:00 2001 From: Sidhant Aggarwal <10743214+sidhant92@users.noreply.github.com> Date: Sun, 23 Feb 2025 22:58:02 +0530 Subject: [PATCH] simplify condition --- .../parser/antlr/BooleanFilterListener.java | 19 +++++++++++-------- .../BooleanExpressionEvaluatorTest.java | 10 ++++++++++ 2 files changed, 21 insertions(+), 8 deletions(-) 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 2944fa1..ff806f3 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 @@ -155,19 +155,22 @@ private ArithmeticFunctionNode mapArithmeticFunctionExpressionContext(BooleanExp private ComparisonNode mapComparatorExpressionContext(BooleanExpressionParser.ComparatorExpressionContext ctx) { final Operator operator = Operator.getOperatorFromSymbol(ctx.op.getText()).orElse(Operator.EQUALS); - if (!(ctx.right instanceof BooleanExpressionParser.TypesExpressionContext) && !currentNodes.isEmpty()) { - final Node value = currentNodes.pop(); - return new ComparisonNode(mapContextToNode(ctx.left), value, operator, DataType.INTEGER); - } else { - if (ctx.left instanceof BooleanExpressionParser.ParentExpressionContext && !currentNodes.isEmpty()) { + + if (!currentNodes.isEmpty() && ((ctx.right instanceof BooleanExpressionParser.ParentExpressionContext || ctx.left instanceof BooleanExpressionParser.ParentExpressionContext) || !(currentNodes.peek() instanceof ComparisonNode || currentNodes.peek() instanceof BooleanNode))) { + if (ctx.left instanceof BooleanExpressionParser.TypesExpressionContext) { + final DataType dataType = getDataType(ctx.left.getStart()); + final Node value = mapContextToNode(ctx.left); + return new ComparisonNode(value, currentNodes.pop(), operator, dataType); + } else if (ctx.right instanceof BooleanExpressionParser.TypesExpressionContext) { final DataType dataType = getDataType(ctx.right.getStart()); final Node value = mapContextToNode(ctx.right); return new ComparisonNode(currentNodes.pop(), value, operator, dataType); } - final DataType dataType = getDataType(ctx.right.getStart()); - final Node value = mapContextToNode(ctx.right); - return new ComparisonNode(mapContextToNode(ctx.left), value, operator, dataType); } + + final DataType dataType = getDataType(ctx.right.getStart()); + final Node value = mapContextToNode(ctx.right); + return new ComparisonNode(mapContextToNode(ctx.left), value, operator, dataType); } private ArithmeticNode mapArithmeticExpressionContext(BooleanExpressionParser.ArithmeticExpressionContext 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 a3a2f89..2f83944 100644 --- a/src/test/java/com/github/sidhant92/boolparser/application/BooleanExpressionEvaluatorTest.java +++ b/src/test/java/com/github/sidhant92/boolparser/application/BooleanExpressionEvaluatorTest.java @@ -614,6 +614,16 @@ public void testComparisonWithArithmeticFalseCondition1() { assertFalse(booleanOptional.get()); } + @Test + public void testBooleanComparison() { + final Map data = new HashMap<>(); + data.put("age", true); + data.put("a", 20); + final Try booleanOptional = booleanExpressionEvaluator.evaluate("age = (5 > 3)", data); + assertTrue(booleanOptional.isSuccess()); + assertTrue(booleanOptional.get()); + } + @Test public void testNegativeComparison() { final Map data = new HashMap<>();