Esempio n. 1
0
def trees_equal(a: EvalTree, b: EvalTree) -> bool:
    for nodeA, nodeB in itertools.zip_longest(a.pre_order(),
                                              b.pre_order(),
                                              fillvalue=EvalTreeNode(None)):
        if nodeA.payload != nodeB.payload:
            return False
    return True
Esempio n. 2
0
 def test_copy(self):
     root = EvalTreeNode(
         OPERATORS['d'], EvalTreeNode(1),
         EvalTreeNode(OPERATORS['d'], EvalTreeNode(4), EvalTreeNode(20)))
     tree = EvalTree(None)
     tree.root = root
     tree.evaluate()
     copy = tree.copy()
     self.assertEqual(tree, copy)
     self.assertIsNot(tree, copy)
     for origNode, copyNode in zip(tree.pre_order(), copy.pre_order()):
         self.assertIsNot(origNode, copyNode)
         # Avoid false positives from int interning
         if not isinstance(origNode.value, int):
             self.assertIsNot(origNode.value, copyNode.value)
         if not isinstance(origNode.payload, int):
             self.assertIsNot(origNode.payload, copyNode.payload)
Esempio n. 3
0
def tree_empty(tree: EvalTree) -> bool:
    for node in tree.pre_order():
        if node.value is not None:
            return False
    return True