Skip to content
Snippets Groups Projects
Commit ee315bc7 authored by Taddeus Kroes's avatar Taddeus Kroes
Browse files

Added negation checks to Node.

parent 45fcaca5
No related branches found
No related tags found
No related merge requests found
...@@ -104,9 +104,27 @@ class ExpressionBase(object): ...@@ -104,9 +104,27 @@ class ExpressionBase(object):
def is_op(self, op): def is_op(self, op):
return not self.is_leaf() and self.op == op return not self.is_leaf() and self.op == op
def is_op_or_negated(self, op):
if self.is_leaf():
return False
if self.op == OP_NEG:
return self[0].is_op(op)
return self.op == op
def is_leaf(self): def is_leaf(self):
return self.type != TYPE_OPERATOR return self.type != TYPE_OPERATOR
def is_leaf_or_negated(self):
if self.is_leaf():
return True
if self.is_op(OP_NEG):
return self[0].is_leaf()
return False
def is_power(self): def is_power(self):
return not self.is_leaf() and self.op == OP_POW return not self.is_leaf() and self.op == OP_POW
......
import unittest import unittest
from src.node import ExpressionNode as N, ExpressionLeaf as L from src.node import ExpressionNode as N, ExpressionLeaf as L, OP_ADD
from tests.rulestestcase import tree from tests.rulestestcase import tree
...@@ -23,7 +23,26 @@ class TestNode(unittest.TestCase): ...@@ -23,7 +23,26 @@ class TestNode(unittest.TestCase):
< N('*', L(3), N('^', L('a'), L('b')))) < N('*', L(3), N('^', L('a'), L('b'))))
self.assertFalse(N('^', L('a'), L(3)) < N('^', L('a'), L(2))) self.assertFalse(N('^', L('a'), L(3)) < N('^', L('a'), L(2)))
def test_is_power_true(self): def test_is_op(self):
self.assertTrue(N('+', *self.l[:2]).is_op(OP_ADD))
self.assertFalse(N('-', *self.l[:2]).is_op(OP_ADD))
def test_is_op_or_negated(self):
self.assertTrue(N('+', *self.l[:2]).is_op_or_negated(OP_ADD))
self.assertTrue(N('-', N('+', *self.l[:2])).is_op_or_negated(OP_ADD))
self.assertFalse(N('-', *self.l[:2]).is_op_or_negated(OP_ADD))
def test_is_leaf(self):
self.assertTrue(L(2).is_leaf())
self.assertFalse(N('+', *self.l[:2]).is_leaf())
def test_is_leaf_or_negated(self):
self.assertTrue(L(2).is_leaf_or_negated())
self.assertTrue(N('-', L(2)).is_leaf_or_negated())
self.assertFalse(N('+', *self.l[:2]).is_leaf_or_negated())
self.assertFalse(N('-', N('+', *self.l[:2])).is_leaf_or_negated())
def test_is_power(self):
self.assertTrue(N('^', *self.l[:2]).is_power()) self.assertTrue(N('^', *self.l[:2]).is_power())
self.assertFalse(N('+', *self.l[:2]).is_power()) self.assertFalse(N('+', *self.l[:2]).is_power())
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment