Skip to content

Commit 4449532

Browse files
#428 - fixes inconsistent equals behavior (#430)
1 parent b8b681c commit 4449532

File tree

4 files changed

+46
-6
lines changed

4 files changed

+46
-6
lines changed

src/main/java/com/ezylang/evalex/operators/booleans/InfixEqualsOperator.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,12 +30,12 @@ public class InfixEqualsOperator extends AbstractOperator {
3030
@Override
3131
public EvaluationValue evaluate(
3232
Expression expression, Token operatorToken, EvaluationValue... operands) {
33+
if (operands[0].getDataType() != operands[1].getDataType()) {
34+
return EvaluationValue.booleanValue(false);
35+
}
3336
if (operands[0].isNullValue() && operands[1].isNullValue()) {
3437
return EvaluationValue.booleanValue(true);
3538
}
36-
if (operands[0].isNullValue() || operands[1].isNullValue()) {
37-
return EvaluationValue.booleanValue(false);
38-
}
3939
return expression.convertValue(operands[0].compareTo(operands[1]) == 0);
4040
}
4141
}

src/main/java/com/ezylang/evalex/operators/booleans/InfixNotEqualsOperator.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,12 +30,12 @@ public class InfixNotEqualsOperator extends AbstractOperator {
3030
@Override
3131
public EvaluationValue evaluate(
3232
Expression expression, Token operatorToken, EvaluationValue... operands) {
33+
if (operands[0].getDataType() != operands[1].getDataType()) {
34+
return EvaluationValue.booleanValue(true);
35+
}
3336
if (operands[0].isNullValue() && operands[1].isNullValue()) {
3437
return EvaluationValue.booleanValue(false);
3538
}
36-
if (operands[0].isNullValue() || operands[1].isNullValue()) {
37-
return EvaluationValue.booleanValue(true);
38-
}
3939
return expression.convertValue(operands[0].compareTo(operands[1]) != 0);
4040
}
4141
}

src/test/java/com/ezylang/evalex/operators/booleans/InfixEqualsOperatorTest.java

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,26 @@ void testInfixEqualsLiterals(String expression, String expectedResult)
5454
assertExpressionHasExpectedResult(expression, expectedResult);
5555
}
5656

57+
@ParameterizedTest
58+
@CsvSource(
59+
delimiter = ':',
60+
value = {
61+
"1==\"1\" : false",
62+
"\"1\"==1 : false",
63+
"true==\"1\" : false",
64+
"\"1\"==true : false",
65+
"false==\"1\" : false",
66+
"\"1\"==false : false",
67+
"DT_DATE_NEW(2022,10,30)==1 : false",
68+
"1==DT_DATE_NEW(2022,10,30) : false",
69+
"DT_DURATION_PARSE(\"PT24H\")==1 : false",
70+
"1==DT_DURATION_PARSE(\"PT24H\") : false",
71+
})
72+
void testInfixEqualsTypesDiffer(String expression, String expectedResult)
73+
throws EvaluationException, ParseException {
74+
assertExpressionHasExpectedResult(expression, expectedResult);
75+
}
76+
5777
@Test
5878
void testInfixEqualsVariables() throws EvaluationException, ParseException {
5979
Expression expression = new Expression("a=b");

src/test/java/com/ezylang/evalex/operators/booleans/InfixNotEqualsOperatorTest.java

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,26 @@ void testInfixNotEqualsLiterals(String expression, String expectedResult)
5454
assertExpressionHasExpectedResult(expression, expectedResult);
5555
}
5656

57+
@ParameterizedTest
58+
@CsvSource(
59+
delimiter = ':',
60+
value = {
61+
"1!=\"1\" : true",
62+
"\"1\"!=1 : true",
63+
"true!=\"1\" : true",
64+
"\"1\"!=true : true",
65+
"false!=\"1\" : true",
66+
"\"1\"!=false : true",
67+
"DT_DATE_NEW(2022,10,30)!=1 : true",
68+
"1!=DT_DATE_NEW(2022,10,30) : true",
69+
"DT_DURATION_PARSE(\"PT24H\")!=1 : true",
70+
"1!=DT_DURATION_PARSE(\"PT24H\") : true",
71+
})
72+
void testInfixNotEqualsTypesDiffer(String expression, String expectedResult)
73+
throws EvaluationException, ParseException {
74+
assertExpressionHasExpectedResult(expression, expectedResult);
75+
}
76+
5777
@Test
5878
void testInfixNotEqualsVariables() throws EvaluationException, ParseException {
5979
Expression expression = new Expression("a!=b");

0 commit comments

Comments
 (0)