From 70687ddc028eb4a29ad697a27e7f384bee19537e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bart=C5=82omiej=20Pluta?= Date: Sat, 27 Jul 2019 12:52:30 +0200 Subject: [PATCH] Fix relation operators between floats and integers --- smnp/runtime/evaluators/relation.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/smnp/runtime/evaluators/relation.py b/smnp/runtime/evaluators/relation.py index 020c733..9eeb905 100644 --- a/smnp/runtime/evaluators/relation.py +++ b/smnp/runtime/evaluators/relation.py @@ -21,10 +21,16 @@ class RelationEvaluator(Evaluator): @classmethod def equalOperatorEvaluator(cls, left, operator, right): + if left.type in [Type.INTEGER, Type.FLOAT] and right.type in [Type.INTEGER, Type.FLOAT]: + return Type.bool(left.value == right.value) + return Type.bool(left.type == right.type and left.value == right.value) @classmethod def notEqualOperatorEvaluator(cls, left, operator, right): + if left.type in [Type.INTEGER, Type.FLOAT] and right.type in [Type.INTEGER, Type.FLOAT]: + return Type.bool(left.value != right.value) + return Type.bool(left.type != right.type or left.value != right.value) @classmethod @@ -40,7 +46,7 @@ class RelationEvaluator(Evaluator): return Type.bool(left.value < right.value) if operator.value == "<=": - return Type.bool(left.value < right.value) + return Type.bool(left.value <= right.value) raise RuntimeException(f"Operator {operator.value} is not supported by {left.type.name.lower()} and {right.type.name.lower()} types", operator.pos)