def _testBinaryTree(self, insert, remove, repeat=100, treesize=1000):
        for _r in xrange(repeat):
            root = None
            vals = set()
            for _ts in xrange(treesize):

                n = random.randint(1, treesize * 10)
                root = insert(root, n)
                self.assertIsNotNone(BinaryTree.Search(root, n))
                vals.add(n)

            self.verifyGoodTree(root)
            BinaryTree.InOrder(root,
                               lambda val: sys.stdout.write(str(val) + ' '))
            sys.stdout.write('\n')
            BinaryTree.PreOrder(root, lambda val: val)
            BinaryTree.PostOrder(root, lambda val: val)
            BinaryTree.ByDepthOrder(root, lambda val: val)

            vals = list(vals)
            random.shuffle(vals)
            for n in vals:
                root = remove(root, n)
                self.assertIsNone(BinaryTree.Search(root, n))

            self.verifyGoodTree(root)