def test_remove_root(self): s = test_items_seq(1000) tree = AnderssonTree(s) self.check_aatree_properties(tree) size = len(tree) keys = [x[0] for x in s] keyset = set(keys) while len(keyset) > 0: k = tree.root().key keyset.remove(k) tree.remove(k) size -= 1 self.assertEqual(len(tree), size) self.assertEqual(set(tree.keys()), keyset) self.check_aatree_properties(tree)
def test_max_btree_level(self): def _map_levels(node, level, map_): if node is not None: map_[node.key] = level next_level = level + 1 _map_levels(node.left, next_level, map_) _map_levels(node.right, next_level, map_) def _map_bin_tree_levels(root): """ level is binary tree level, not AATree level """ map_ = {} _map_levels(root, 0, map_) max_level = max(map_.values()) for k, v in map_.items(): map_[k] = max_level - map_[k] + 1 return map_ keys = range(1, 14) tree = AnderssonTree(zip(keys, keys)) mapping = _map_bin_tree_levels(tree.root()) maxl = max(mapping.values()) self.assertEqual(maxl, 5, 'Invalid max level %s!' % maxl)
def test_root(self): x = [5, 6, 4] tree = AnderssonTree(zip(x, x)) self.assertEqual(tree.root().key, 5)