|
@@ -1,13 +1,16 @@
|
|
|
-import unittest
|
|
|
|
|
|
|
+from src.node import ExpressionNode as N, ExpressionLeaf as L, Scope, \
|
|
|
|
|
+ nary_node, get_scope, OP_ADD
|
|
|
|
|
+from tests.rulestestcase import RulesTestCase, tree
|
|
|
|
|
|
|
|
-from src.node import ExpressionNode as N, ExpressionLeaf as L, OP_ADD
|
|
|
|
|
-from tests.rulestestcase import tree
|
|
|
|
|
|
|
|
|
|
-
|
|
|
|
|
-class TestNode(unittest.TestCase):
|
|
|
|
|
|
|
+class TestNode(RulesTestCase):
|
|
|
|
|
|
|
|
def setUp(self):
|
|
def setUp(self):
|
|
|
self.l = [L(1), N('*', L(2), L(3)), L(4), L(5)]
|
|
self.l = [L(1), N('*', L(2), L(3)), L(4), L(5)]
|
|
|
|
|
+ self.n, self.f = tree('a + b + cd,f')
|
|
|
|
|
+ (self.a, self.b), self.cd = self.n
|
|
|
|
|
+ self.c, self.d = self.cd
|
|
|
|
|
+ self.scope = Scope(self.n)
|
|
|
|
|
|
|
|
def test___lt__(self):
|
|
def test___lt__(self):
|
|
|
self.assertTrue(L(1) < L(2))
|
|
self.assertTrue(L(1) < L(2))
|
|
@@ -95,19 +98,19 @@ class TestNode(unittest.TestCase):
|
|
|
|
|
|
|
|
def test_get_scope_binary(self):
|
|
def test_get_scope_binary(self):
|
|
|
plus = N('+', *self.l[:2])
|
|
plus = N('+', *self.l[:2])
|
|
|
- self.assertEqual(plus.get_scope(), self.l[:2])
|
|
|
|
|
|
|
+ self.assertEqual(get_scope(plus), self.l[:2])
|
|
|
|
|
|
|
|
def test_get_scope_nested_left(self):
|
|
def test_get_scope_nested_left(self):
|
|
|
plus = N('+', N('+', *self.l[:2]), self.l[2])
|
|
plus = N('+', N('+', *self.l[:2]), self.l[2])
|
|
|
- self.assertEqual(plus.get_scope(), self.l[:3])
|
|
|
|
|
|
|
+ self.assertEqual(get_scope(plus), self.l[:3])
|
|
|
|
|
|
|
|
def test_get_scope_nested_right(self):
|
|
def test_get_scope_nested_right(self):
|
|
|
plus = N('+', self.l[0], N('+', *self.l[1:3]))
|
|
plus = N('+', self.l[0], N('+', *self.l[1:3]))
|
|
|
- self.assertEqual(plus.get_scope(), self.l[:3])
|
|
|
|
|
|
|
+ self.assertEqual(get_scope(plus), self.l[:3])
|
|
|
|
|
|
|
|
def test_get_scope_nested_deep(self):
|
|
def test_get_scope_nested_deep(self):
|
|
|
plus = N('+', N('+', N('+', *self.l[:2]), self.l[2]), self.l[3])
|
|
plus = N('+', N('+', N('+', *self.l[:2]), self.l[2]), self.l[3])
|
|
|
- self.assertEqual(plus.get_scope(), self.l)
|
|
|
|
|
|
|
+ self.assertEqual(get_scope(plus), self.l)
|
|
|
|
|
|
|
|
def test_equals_node_leaf(self):
|
|
def test_equals_node_leaf(self):
|
|
|
a, b = plus = tree('a + b')
|
|
a, b = plus = tree('a + b')
|
|
@@ -168,3 +171,36 @@ class TestNode(unittest.TestCase):
|
|
|
|
|
|
|
|
m0, m1 = tree('-5 * -3,-5 * 6')
|
|
m0, m1 = tree('-5 * -3,-5 * 6')
|
|
|
self.assertFalse(m0.equals(m1))
|
|
self.assertFalse(m0.equals(m1))
|
|
|
|
|
+
|
|
|
|
|
+ def test_scope___init__(self):
|
|
|
|
|
+ self.assertEqual(self.scope.node, self.n)
|
|
|
|
|
+ self.assertEqual(self.scope.nodes, [self.a, self.b, self.cd])
|
|
|
|
|
+
|
|
|
|
|
+ def test_scope_remove_leaf(self):
|
|
|
|
|
+ self.scope.remove(self.b)
|
|
|
|
|
+ self.assertEqual(self.scope.nodes, [self.a, self.cd])
|
|
|
|
|
+
|
|
|
|
|
+ def test_scope_remove_node(self):
|
|
|
|
|
+ self.scope.remove(self.cd)
|
|
|
|
|
+ self.assertEqual(self.scope.nodes, [self.a, self.b])
|
|
|
|
|
+
|
|
|
|
|
+ def test_scope_remove_replace(self):
|
|
|
|
|
+ self.scope.remove(self.cd, self.f)
|
|
|
|
|
+ self.assertEqual(self.scope.nodes, [self.a, self.b, self.f])
|
|
|
|
|
+
|
|
|
|
|
+ def test_scope_remove_error(self):
|
|
|
|
|
+ with self.assertRaises(ValueError):
|
|
|
|
|
+ self.scope.remove(self.f)
|
|
|
|
|
+
|
|
|
|
|
+ def test_nary_node(self):
|
|
|
|
|
+ a, b, c, d = tree('a,b,c,d')
|
|
|
|
|
+
|
|
|
|
|
+ self.assertEqualNodes(nary_node('+', [a]), a)
|
|
|
|
|
+ self.assertEqualNodes(nary_node('+', [a, b]), N('+', a, b))
|
|
|
|
|
+ self.assertEqualNodes(nary_node('+', [a, b, c]),
|
|
|
|
|
+ N('+', N('+', a, b), c))
|
|
|
|
|
+ self.assertEqualNodes(nary_node('+', [a, b, c, d]),
|
|
|
|
|
+ N('+', N('+', N('+', a, b), c), d))
|
|
|
|
|
+
|
|
|
|
|
+ def test_scope_as_nary_node(self):
|
|
|
|
|
+ self.assertEqualNodes(self.scope.as_nary_node(), self.n)
|