Example #1
0
 def _createComplexTree(self):
     """
 Creates the following tree
   0: NAME1->NAME3
   1: NAME1->NAME2->NAME4
 """
     self.tree2 = self._AddChild(NAME2, position=1)
     self.tree3 = self._AddChild(NAME3, position=0)
     self.tree4 = PositionTree(NAME4)
     self.tree2.addChild(self.tree4)
Example #2
0
 def testMoveChildToPosition(self):
     if IGNORE_TEST:
         return
     tree5 = PositionTree(NAME5)
     self.root.addChild(tree5)
     new_position = 0
     self.root.moveChildToPosition(self.tree2, new_position)
     self.assertEqual(self.root._children[0], self.tree2)
     # Make sure it works if nothing is moved
     new_position = 0
     self.root.moveChildToPosition(self.tree2, new_position)
     self.assertEqual(self.root._children[0], self.tree2)
     # Move an end tree
     new_position = 0
     self.root.moveChildToPosition(tree5, new_position)
     self.assertEqual(self.root._children[0], tree5)
Example #3
0
 def _AddChild(self, name, position=None):
     new_tree = PositionTree(name)
     self.root.addChild(new_tree, position=position)
     return new_tree
Example #4
0
 def setUp(self):
     self.root = PositionTree(NAME)
     self._createComplexTree()
Example #5
0
class TestPositionTree(unittest.TestCase):
    def setUp(self):
        self.root = PositionTree(NAME)
        self._createComplexTree()

    def _AddChild(self, name, position=None):
        new_tree = PositionTree(name)
        self.root.addChild(new_tree, position=position)
        return new_tree

    def _createComplexTree(self):
        """
    Creates the following tree
      0: NAME1->NAME3
      1: NAME1->NAME2->NAME4
    """
        self.tree2 = self._AddChild(NAME2, position=1)
        self.tree3 = self._AddChild(NAME3, position=0)
        self.tree4 = PositionTree(NAME4)
        self.tree2.addChild(self.tree4)

    def testAddChild(self):
        if IGNORE_TEST:
            return
        self.assertEqual(self.root._children[0], self.tree3)
        self.assertEqual(self.root._children[1], self.tree2)

    def testGetChildAtPosition(self):
        if IGNORE_TEST:
            return
        tree3 = self.root.getChildAtPosition(0)
        self.assertEqual(tree3, self.tree3)
        tree2 = self.root.getChildAtPosition(1)
        self.assertEqual(tree2, self.tree2)
        with self.assertRaises(ValueError):
            _ = self.root.getChildAtPosition(2)

    def testGetPosition(self):
        if IGNORE_TEST:
            return
        expected_position = self.root.getPositionOfChild(self.tree2)
        self.assertEqual(expected_position, self.tree2.getPosition())
        self.assertIsNone(self.root.getPosition())

    def testGetPositionOfChild(self):
        if IGNORE_TEST:
            return
        position = self.root.getPositionOfChild(self.tree2)
        self.assertEqual(position, 1)
        self.assertIsNone(self.root.getPositionOfChild(self.tree4))

    def testMoveChildToPosition(self):
        if IGNORE_TEST:
            return
        tree5 = PositionTree(NAME5)
        self.root.addChild(tree5)
        new_position = 0
        self.root.moveChildToPosition(self.tree2, new_position)
        self.assertEqual(self.root._children[0], self.tree2)
        # Make sure it works if nothing is moved
        new_position = 0
        self.root.moveChildToPosition(self.tree2, new_position)
        self.assertEqual(self.root._children[0], self.tree2)
        # Move an end tree
        new_position = 0
        self.root.moveChildToPosition(tree5, new_position)
        self.assertEqual(self.root._children[0], tree5)

    def testMoveChildToOtherchild(self):
        """
    Existing tree
      NAME1
        NAME3
        NAME2
          NAME4
    New tree
      NAME1
        NAME4
        NAME3
        NAME2
    """
        if IGNORE_TEST:
            return
        self.root.moveChildToOtherchild(self.tree4, self.tree3)
        self.assertEqual(self.root.getChildAtPosition(0), self.tree4)

    def testMoveChildToOtherchild2(self):
        """
    Existing tree
      NAME1
        NAME3
        NAME2
          NAME4
    New tree
      NAME1
        NAME2
          NAME4
        NAME3
    """
        if IGNORE_TEST:
            return
        self.root.moveChildToOtherchild(self.tree3, self.tree2)
        self.assertEqual(self.root.getChildAtPosition(0), self.tree2)

    def testIsRoot(self):
        if IGNORE_TEST:
            return
        self.assertTrue(self.root.isRoot())
        new_tree = Tree("DUMMY_TREE")
        self.root.addChild(new_tree)
        self.assertFalse(new_tree.isRoot())
        self.assertTrue(self.root.isRoot())

    def testValidateTree(self):
        if IGNORE_TEST:
            return
        self.tree2 = self._AddChild(NEW_NAME)
        with self.assertRaises(RuntimeError):
            self.tree2 = self._AddChild(NEW_NAME)

    def testIter(self):
        if IGNORE_TEST:
            return
        self.assertTrue(isinstance(iter(self.root), TreeIterator))
        iterator = iter(self.root)
        self.assertTrue(isinstance(next(iterator), Tree))

    def testCreateRandomTree(self):
        if IGNORE_TEST:
            return
        num_nodes = 5
        tree = Tree.createRandomTree(num_nodes, 0.1)
        self.assertEqual(len(tree.getAllNodes()), num_nodes)
        self.assertEqual(len(tree.getChildren()), num_nodes - 1)
        tree = Tree.createRandomTree(1, 0.1)
        self.assertEqual(len(tree.getAllNodes()), 1)
        tree = Tree.createRandomTree(2, 0.1)
        self.assertEqual(len(tree.getAllNodes()), 2)
        tree = Tree.createRandomTree(num_nodes, 0.99)
        self.assertEqual(len(tree.getAllNodes()), num_nodes)
        num_nodes = 500
        tree = Tree.createRandomTree(num_nodes, 0.1)
        tree.validateTree()

    def testFindLeavesInNodes(self):
        num_nodes = 50
        tree1 = Tree.createRandomTree(num_nodes, 0.2)
        tree2 = Tree.createRandomTree(num_nodes, 0.2)
        expected = tree1.getLeaves()
        expected.extend(tree2.getLeaves())
        expected = set(expected)
        nodes = tree1.getAllNodes()
        nodes.extend(tree2.getAllNodes())
        actual = set(Tree.findLeavesInNodes(nodes))
        self.assertEqual(expected.difference(actual),
                         actual.difference(expected))

    def testFindRootsInNodes(self):
        num_nodes = 5
        tree1 = Tree.createRandomTree(num_nodes, 0.2)
        tree2 = Tree.createRandomTree(num_nodes, 0.2)
        nodes = tree1.getAllNodes()
        nodes.extend(tree2.getAllNodes())
        roots = Tree.findRootsInNodes(nodes)
        self.assertEqual(len(roots), 2)
        for tree in [tree1, tree2]:
            self.assertTrue(tree in roots)
        tree1.addChild(tree2)
        roots = Tree.findRootsInNodes(nodes)
        self.assertEqual(roots, [tree1])
        nodes.remove(tree1)
        roots = Tree.findRootsInNodes(nodes)
        expected = tree1.getChildren()
        self.assertEqual(roots, expected)
Example #6
0
 def setUp(self):
   self.root = PositionTree(NAME)
   self._createComplexTree()
Example #7
0
class TestPositionTree(unittest.TestCase):
  
  def setUp(self):
    self.root = PositionTree(NAME)
    self._createComplexTree()

  def _AddChild(self, name, position=None):
    new_tree = PositionTree(name)
    self.root.addChild(new_tree, position=position)
    return new_tree

  def _createComplexTree(self):
    """
    Creates the following tree
      0: NAME1->NAME3
      1: NAME1->NAME2->NAME4
    """
    self.tree2 = self._AddChild(NAME2, position=1)
    self.tree3 = self._AddChild(NAME3, position=0)
    self.tree4 = Tree(NAME4)
    self.tree2.addChild(self.tree4)

  def testAddChild(self):
    if IGNORE_TEST:
      return
    self.assertEqual(self.root._children[0], self.tree3)
    self.assertEqual(self.root._children[1], self.tree2)

  def testGetChildAtPosition(self):
    if IGNORE_TEST:
      return
    tree3 = self.root.getChildAtPosition(0)
    self.assertEqual(tree3, self.tree3)
    tree2 = self.root.getChildAtPosition(1)
    self.assertEqual(tree2, self.tree2)
    with self.assertRaises(ValueError):
      _ = self.root.getChildAtPosition(2)

  def testGetPosition(self):
    if IGNORE_TEST:
      return
    expected_position = self.root.getPositionOfChild(self.tree2)
    self.assertEqual(expected_position, self.tree2.getPosition())
    self.assertIsNone(self.root.getPosition())

  def testGetPositionOfChild(self):
    if IGNORE_TEST:
      return
    position = self.root.getPositionOfChild(self.tree2)
    self.assertEqual(position, 1)
    self.assertIsNone(self.root.getPositionOfChild(self.tree4))

  def testMoveChildToPosition(self):
    if IGNORE_TEST:
      return
    tree5 = PositionTree(NAME5)
    self.root.addChild(tree5)
    new_position = 0
    self.root.moveChildToPosition(self.tree2, new_position)
    self.assertEqual(self.root._children[0], self.tree2)
    # Make sure it works if nothing is moved
    new_position = 0
    self.root.moveChildToPosition(self.tree2, new_position)
    self.assertEqual(self.root._children[0], self.tree2)
    # Move an end tree
    new_position = 0
    self.root.moveChildToPosition(tree5, new_position)
    self.assertEqual(self.root._children[0], tree5)

  def testToString(self):
    if IGNORE_TEST:
      return
    tree5 = PositionTree(NAME5)
    self.root.addChild(tree5)
    result = self.root.toString()
    self.assertTrue("2: ->NAME5" in result)
    self.assertEqual(result.count('->'), 4)

  def testIsRoot(self):
    if IGNORE_TEST:
      return
    self.assertTrue(self.root.isRoot())
    new_tree = Tree("DUMMY_TREE")
    self.root.addChild(new_tree)
    self.assertFalse(new_tree.isRoot())
    self.assertTrue(self.root.isRoot())

  # TODO: Delete since this is testing Table?
  def testIsEquivalent(self):
    if IGNORE_TEST:
      return
    [table, other_table] = getCapture("test_table_1")
    result = super(NamedTree, table).isEquivalent(other_table)
    self.assertTrue(result)

  def testValidateTree(self):
    self.tree2 = self._AddChild(NEW_NAME)
    with self.assertRaises(RuntimeError):
      self.tree2 = self._AddChild(NEW_NAME)