Add support for logical expressions

This commit is contained in:
Charles-P. Clermont
2026-01-26 16:53:38 -05:00
parent e911eea3df
commit 429711fd82
5 changed files with 104 additions and 4 deletions
+29
View File
@@ -77,6 +77,35 @@ class ParserUnitTest < Minitest::Test
assert_equal(0..5, p.expression)
end
def test_logical
p = new_parser("a and b")
expr = p.expression
assert(expr.is_a?(BinaryExpression))
assert_equal('and', expr.operator)
assert_equal('a', expr.left_node.name)
assert_equal('b', expr.right_node.name)
p = new_parser("a and b or c")
expr = p.expression
assert(expr.is_a?(BinaryExpression))
assert_equal('and', expr.operator)
assert_equal('a', expr.left_node.name)
assert_equal('or', expr.right_node.operator)
assert_equal('b', expr.right_node.left_node.name)
assert_equal('c', expr.right_node.right_node.name)
p = new_parser("a == b and c or d")
expr = p.expression
assert(expr.is_a?(BinaryExpression))
assert_equal('and', expr.operator)
assert_equal('==', expr.left_node.operator)
assert_equal('a', expr.left_node.left_node.name)
assert_equal('b', expr.left_node.right_node.name)
assert_equal('or', expr.right_node.operator)
assert_equal('c', expr.right_node.left_node.name)
assert_equal('d', expr.right_node.right_node.name)
end
def test_equality
p = new_parser("a == b")
expr = p.expression