def testInsertRandomRemoveRandom(self):
        tree = avltree.AVLTree()

        LEN=200

        values = range(LEN)
        inserted = []
        for i in range(LEN-1, -1, -1):
            v = values.pop(random.randint(0, i))
            inserted.append(v)
            tree.insert(v)
            try:
                self.assertOrdered(tree.tree, -1, LEN-i)
                self.assertBalanced(tree.tree)
            except:
                print 'insertion order:', inserted
                raise

        values = range(LEN)
        for i in range(LEN-1, -1, -1):
            v = values.pop(random.randint(0, i))
            savetree = tree.tree
            tree.delete(v)
            try:
                self.assertOrdered(tree.tree, values and values[0]-1 or -1, i)
                self.assertBalanced(tree.tree)
            except:
                print 'while deleting:', v, 'from:', savetree
                avltree.debug(savetree)
                raise
Пример #2
0
    def testInsertRandomRemoveRandom(self):
        tree = avltree.AVLTree()

        LEN = 200

        values = range(LEN)
        inserted = []
        for i in range(LEN - 1, -1, -1):
            v = values.pop(random.randint(0, i))
            inserted.append(v)
            tree.insert(v)
            try:
                self.assertOrdered(tree.tree, -1, LEN - i)
                self.assertBalanced(tree.tree)
            except:
                print 'insertion order:', inserted
                raise

        values = range(LEN)
        for i in range(LEN - 1, -1, -1):
            v = values.pop(random.randint(0, i))
            savetree = tree.tree
            tree.delete(v)
            try:
                self.assertOrdered(tree.tree, values and values[0] - 1 or -1,
                                   i)
                self.assertBalanced(tree.tree)
            except:
                print 'while deleting:', v, 'from:', savetree
                avltree.debug(savetree)
                raise
 def assertBalanced(self, tree):
     if tree is None:
         return 0
     l, v, r, b = tree
     lh = self.assertBalanced(l)
     rh = self.assertBalanced(r)
     try:
         self.assertEquals(rh - lh, b, "incorrect balance factor")
     except:
         print 'rh:', rh, 'lh:', lh, 'b:', b
         avltree.debug(tree)
         raise
     self.failIf(b < -1, "unbalanced tree: left side too tall")
     self.failIf(b > 1, "unbalanced tree: right side too tall")
     return max(lh, rh) + 1
Пример #4
0
 def assertBalanced(self, tree):
     if tree is None:
         return 0
     l, v, r, b = tree
     lh = self.assertBalanced(l)
     rh = self.assertBalanced(r)
     try:
         self.assertEquals(rh - lh, b, "incorrect balance factor")
     except:
         print 'rh:', rh, 'lh:', lh, 'b:', b
         avltree.debug(tree)
         raise
     self.failIf(b < -1, "unbalanced tree: left side too tall")
     self.failIf(b > 1, "unbalanced tree: right side too tall")
     return max(lh, rh) + 1