def testFlattenRandomTree(self):
   if IGNORE_TEST:
     return
   tree = NamedTree.createRandomNamedTree(100, 0.5,
       prob_detach=0.2)
   leaves = tree.getLeaves()
   detached_nodes = [n for n in tree.getAllNodes()
                     if not n.isAttached()]
   # Include in the leaves the parents with no attached
   # children
   for node in detached_nodes:
     parent = node.getParent()
     is_leaf = True
     for child in parent.getChildren():
       if child.isAttached():
         is_leaf = False
         break
     if is_leaf and (not parent in leaves):
       leaves.append(parent)
   leaf_full_names = [l._makeFlattenName() for l in leaves]
   elements = tree.flatten()
   names = []
   for e in elements:
     e.tree._checkTreeStructure()
     for leaf in e.tree.getLeaves():
       names.append(leaf._makeFlattenName())
   self.assertEqual(set(leaf_full_names), set(names))
 def testUnflattenManyTrees(self):
   if IGNORE_TEST:
    return
   tree = NamedTree.createRandomNamedTree(100, 0.5,
       prob_detach=0.2)
   tree._checkTreeStructure()
   tree_list = tree.flatten()
   new_tree = NamedTree.unflatten(tree_list)
   self.assertTrue(tree.isEquivalent(new_tree))
 def testDetachTreesRandom(self):
   if IGNORE_TEST:
     return
   tree = NamedTree.createRandomNamedTree(300, 0.5,
       prob_detach=0.2)
   elements = tree._detachTrees()
   detached = [c for c in tree.getAllNodes() if not c.isAttached()]
   expected_num = len(detached) + 1
   self.assertEqual(expected_num, len(elements))
   for element in elements:
     root = element.tree
     parsed_name = root.getName(is_global_name=False).split(FLATTEN_SEPARATOR)
     self.assertEqual(len(parsed_name), len(set(parsed_name)))
     for name in parsed_name:
       b = any([name in node._name for node in tree.getAllNodes()])
       self.assertTrue(b)