Skip to content

Commit 5ca2c84

Browse files
committed
Remove type-compatibility checks from the equality operators
1 parent cfb4d60 commit 5ca2c84

File tree

2 files changed

+14
-4
lines changed

2 files changed

+14
-4
lines changed

lib/rule_engine/ast.py

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -847,17 +847,13 @@ def _op_or(self, thing):
847847
class ComparisonExpression(LeftOperatorRightExpressionBase):
848848
"""A class for representing comparison expressions from the grammar text such as equality checks."""
849849
def _op_eq(self, thing):
850-
if not DataType.is_compatible(self.left.result_type, self.right.result_type):
851-
return False
852850
left_value = self.left.evaluate(thing)
853851
right_value = self.right.evaluate(thing)
854852
if type(left_value) is not type(right_value):
855853
return False
856854
return operator.eq(left_value, right_value)
857855

858856
def _op_ne(self, thing):
859-
if not DataType.is_compatible(self.left.result_type, self.right.result_type):
860-
return True
861857
left_value = self.left.evaluate(thing)
862858
right_value = self.right.evaluate(thing)
863859
if type(left_value) is not type(right_value):

tests/issues.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,9 @@
3333
import random
3434
import unittest
3535

36+
import rule_engine.ast as ast
3637
import rule_engine.engine as engine
38+
import rule_engine.errors as errors
3739

3840
class GitHubIssueTests(unittest.TestCase):
3941
def test_number_10(self):
@@ -47,3 +49,15 @@ def test_number_10(self):
4749
rule1 = engine.Rule(rule_text, context=engine.Context())
4850
rule2 = engine.Rule(rule_text, context=engine.Context(default_value=None))
4951
self.assertEqual(rule1.evaluate(thing), rule2.evaluate(thing))
52+
53+
def test_number_14(self):
54+
context = engine.Context(
55+
type_resolver=engine.type_resolver_from_dict({
56+
'TEST_FLOAT': ast.DataType.FLOAT,
57+
})
58+
)
59+
rule = engine.Rule(
60+
'(TEST_FLOAT == null ? 0 : TEST_FLOAT) < 42',
61+
context=context
62+
)
63+
rule.matches({'TEST_FLOAT': None})

0 commit comments

Comments
 (0)