Пример #1
0
    def test_persistent_rb_insert(self):
        keys = [random.randrange(1000) for _ in range(20)]
        tree = RedBlackTree()

        for i, key in enumerate(keys):
            new_tree = persistent_rb_insert(tree, ParentlessNode(key))

            assert_red_black_tree(new_tree, sentinel=tree.nil)
            actual_keys_before_insertion = get_binary_tree_keys(tree, sentinel=tree.nil)
            actual_keys_after_insertion = get_binary_tree_keys(new_tree, sentinel=tree.nil)
            assert_that(actual_keys_before_insertion, contains_inanyorder(*keys[:i]))
            assert_that(actual_keys_after_insertion, contains_inanyorder(*keys[:i + 1]))
            tree = new_tree
Пример #2
0
    def test_persistent_tree_insert(self):
        keys = [random.randrange(1000) for _ in range(20)]
        tree = BinaryTree()

        for i, key in enumerate(keys):

            new_tree = persistent_tree_insert(tree, key)

            assert_binary_search_tree(new_tree)
            actual_keys_before_insertion = get_binary_tree_keys(tree)
            actual_keys_after_insertion = get_binary_tree_keys(new_tree)
            assert_that(actual_keys_before_insertion, contains_inanyorder(*keys[:i]))
            assert_that(actual_keys_after_insertion, contains_inanyorder(*keys[:i + 1]))
            tree = new_tree
Пример #3
0
    def test_persistent_rb_delete(self):
        tree, _, keys = get_random_red_black_tree()
        transform_tree_to_parentless_tree(tree)
        nodes = get_binary_tree_nodes(tree, sentinel=tree.nil)

        while nodes:
            node = random.choice(nodes)

            new_tree = persistent_rb_delete(tree, node)

            assert_red_black_tree(new_tree, sentinel=tree.nil)
            actual_keys_before_insertion = get_binary_tree_keys(tree, sentinel=tree.nil)
            actual_keys_after_insertion = get_binary_tree_keys(new_tree, sentinel=new_tree.nil)
            assert_that(actual_keys_before_insertion, contains_inanyorder(*keys))
            keys.remove(node.key)
            assert_that(actual_keys_after_insertion, contains_inanyorder(*keys))
            tree = new_tree
            nodes = get_binary_tree_nodes(tree, sentinel=tree.nil)
Пример #4
0
    def test_recursive_tree_insert(self):
        keys = [random.randrange(1000) for _ in range(20)]
        tree = BinaryTree()

        for key in keys:
            recursive_tree_insert_wrapper(tree, Node(key))

            assert_binary_search_tree(tree)
            assert_parent_pointers_consistent(tree)

        actual_keys = get_binary_tree_keys(tree)
        assert_that(actual_keys, contains_inanyorder(*keys))
Пример #5
0
    def test_recursive_tree_insert(self):
        keys = [random.randrange(1000) for _ in range(20)]
        tree = BinaryTree()

        for key in keys:
            recursive_tree_insert_wrapper(tree, Node(key))

            assert_binary_search_tree(tree)
            assert_parent_pointers_consistent(tree)

        actual_keys = get_binary_tree_keys(tree)
        assert_that(actual_keys, contains_inanyorder(*keys))
Пример #6
0
    def test_rb_parentless_insert(self):
        keys = [random.randrange(1000) for _ in range(20)]
        tree = RedBlackTree()

        for key in keys:

            parentless_rb_insert(tree, Node(key))

            assert_red_black_tree(tree, sentinel=tree.nil)

        actual_keys = get_binary_tree_keys(tree, sentinel=tree.nil)
        assert_that(actual_keys, contains_inanyorder(*keys))
Пример #7
0
    def test_rb_parentless_insert(self):
        keys = [random.randrange(1000) for _ in range(20)]
        tree = RedBlackTree()

        for key in keys:

            parentless_rb_insert(tree, Node(key))

            assert_red_black_tree(tree, sentinel=tree.nil)

        actual_keys = get_binary_tree_keys(tree, sentinel=tree.nil)
        assert_that(actual_keys, contains_inanyorder(*keys))
Пример #8
0
    def test_rb_insert(self):
        _, keys = get_random_array()
        tree = RedBlackTree()

        for key in keys:

            rb_insert(tree, Node(key), sentinel=tree.nil)

            assert_red_black_tree(tree, sentinel=tree.nil)
            assert_parent_pointers_consistent(tree, sentinel=tree.nil)

        actual_keys = get_binary_tree_keys(tree, sentinel=tree.nil)
        assert_that(actual_keys, contains_inanyorder(*keys))
Пример #9
0
    def test_interval_left_rotate(self):
        tree, nodes, keys = get_random_interval_tree()
        node = pick_node_with_right_child(nodes, tree)  # node is for sure != tree.nil as the tree has black_height = 3

        interval_left_rotate(tree, node)

        actual_inorder_keys = get_binary_tree_keys(tree, sentinel=tree.nil)
        assert_that(actual_inorder_keys, is_(equal_to(sorted(keys))))
        expected_node_max = max(node.int.high, node.left.max, node.right.max)
        assert_that(node.max, is_(equal_to(expected_node_max)))
        node_parent = node.p
        expected_node_parent_max = max(node_parent.int.high, node.max, node_parent.right.max)
        assert_that(node_parent.max, is_(equal_to(expected_node_parent_max)))
Пример #10
0
    def test_safe_tree_delete(self):
        tree, nodes, keys = get_random_binary_search_tree()
        random.shuffle(nodes)

        for node in nodes:
            keys.remove(node.key)

            safe_tree_delete(tree, node)

            assert_binary_search_tree(tree)
            assert_parent_pointers_consistent(tree)
            actual_keys = get_binary_tree_keys(tree)
            assert_that(actual_keys, contains_inanyorder(*keys))
Пример #11
0
    def test_treap_insert(self):
        keys = [random.randrange(1000) for _ in range(20)]
        treap = Treap()

        for key in keys:

            treap_insert(treap, tp.Node(key))

            assert_treap(treap)
            assert_parent_pointers_consistent(treap)

        actual_keys = get_binary_tree_keys(treap)
        assert_that(actual_keys, contains_inanyorder(*keys))
Пример #12
0
    def test_safe_tree_delete(self):
        tree, nodes, keys = get_random_binary_search_tree()
        random.shuffle(nodes)

        for node in nodes:
            keys.remove(node.key)

            safe_tree_delete(tree, node)

            assert_binary_search_tree(tree)
            assert_parent_pointers_consistent(tree)
            actual_keys = get_binary_tree_keys(tree)
            assert_that(actual_keys, contains_inanyorder(*keys))
Пример #13
0
    def test_interval_insert(self):
        keys = [random.randrange(949) for _ in range(20)]
        tree = RedBlackTree(sentinel=IntervalNode(None, None))

        for key in keys:

            interval_insert(tree, IntervalNode(key, Interval(key, key + random.randint(0, 50))))

            assert_interval_tree(tree)
            assert_parent_pointers_consistent(tree, sentinel=tree.nil)

        actual_keys = get_binary_tree_keys(tree, sentinel=tree.nil)
        assert_that(actual_keys, contains_inanyorder(*keys))
Пример #14
0
    def test_os_insert(self):
        keys = [random.randrange(1000) for _ in range(20)]
        tree = RedBlackTree(sentinel=OSNode(None))

        for i, key in enumerate(keys):

            os_insert(tree, OSNode(key))

            assert_os_tree(tree)
            assert_that(tree.root.size, is_(equal_to(i + 1)))
            assert_parent_pointers_consistent(tree, sentinel=tree.nil)

        actual_keys = get_binary_tree_keys(tree, sentinel=tree.nil)
        assert_that(actual_keys, contains_inanyorder(*keys))
Пример #15
0
    def test_os_insert(self):
        keys = [random.randrange(1000) for _ in range(20)]
        tree = RedBlackTree(sentinel=OSNode(None))

        for i, key in enumerate(keys):

            os_insert(tree, OSNode(key))

            assert_os_tree(tree)
            assert_that(tree.root.size, is_(equal_to(i + 1)))
            assert_parent_pointers_consistent(tree, sentinel=tree.nil)

        actual_keys = get_binary_tree_keys(tree, sentinel=tree.nil)
        assert_that(actual_keys, contains_inanyorder(*keys))
Пример #16
0
    def test_interval_delete(self):
        tree, _, keys = get_random_interval_tree()
        nodes = get_binary_tree_nodes(tree, sentinel=tree.nil)

        while nodes:
            node = random.choice(nodes)
            keys.remove(node.key)

            interval_delete(tree, node)

            assert_interval_tree(tree)
            assert_parent_pointers_consistent(tree, sentinel=tree.nil)
            actual_keys = get_binary_tree_keys(tree, sentinel=tree.nil)
            assert_that(actual_keys, contains_inanyorder(*keys))
            nodes = get_binary_tree_nodes(tree, sentinel=tree.nil)
Пример #17
0
    def test_interval_delete(self):
        tree, _, keys = get_random_interval_tree()
        nodes = get_binary_tree_nodes(tree, sentinel=tree.nil)

        while nodes:
            node = random.choice(nodes)
            keys.remove(node.key)

            interval_delete(tree, node)

            assert_interval_tree(tree)
            assert_parent_pointers_consistent(tree, sentinel=tree.nil)
            actual_keys = get_binary_tree_keys(tree, sentinel=tree.nil)
            assert_that(actual_keys, contains_inanyorder(*keys))
            nodes = get_binary_tree_nodes(tree, sentinel=tree.nil)
Пример #18
0
    def test_interval_insert(self):
        keys = [random.randrange(949) for _ in range(20)]
        tree = RedBlackTree(sentinel=IntervalNode(None, None))

        for key in keys:

            interval_insert(
                tree,
                IntervalNode(key, Interval(key, key + random.randint(0, 50))))

            assert_interval_tree(tree)
            assert_parent_pointers_consistent(tree, sentinel=tree.nil)

        actual_keys = get_binary_tree_keys(tree, sentinel=tree.nil)
        assert_that(actual_keys, contains_inanyorder(*keys))
Пример #19
0
    def test_rb_join(self):
        tree1, _, keys1 = get_random_red_black_tree(black_height=random.randint(0, 4),
                                                    min_value=0, max_value=999, sentinel=None)
        tree1.bh = calculate_black_height(tree1.root)
        middle_key = random.randint(1000, 1999)
        x = Node(middle_key)
        tree2, _, keys2 = get_random_red_black_tree(black_height=random.randint(0, 4),
                                                    min_value=2000, max_value=2999, sentinel=None)
        tree2.bh = calculate_black_height(tree2.root)

        actual_joined_tree = rb_join(tree1, x, tree2)

        assert_red_black_tree(actual_joined_tree)
        actual_keys = get_binary_tree_keys(actual_joined_tree)
        assert_that(actual_keys, contains_inanyorder(*(keys1 + [middle_key] + keys2)))
Пример #20
0
    def test_joinable_rb_insert(self):
        keys = [random.randrange(1000) for _ in range(20)]
        tree = RedBlackTree(sentinel=None)
        tree.bh = 0

        for key in keys:

            joinable_rb_insert(tree, Node(key))

            assert_red_black_tree(tree)
            assert_parent_pointers_consistent(tree)

        actual_keys = get_binary_tree_keys(tree)
        assert_that(actual_keys, contains_inanyorder(*keys))
        actual_black_height = calculate_black_height(tree.root)
        assert_that(tree.bh, is_(equal_to(actual_black_height)))
Пример #21
0
    def test_joinable_rb_insert(self):
        keys = [random.randrange(1000) for _ in range(20)]
        tree = RedBlackTree(sentinel=None)
        tree.bh = 0

        for key in keys:

            joinable_rb_insert(tree, Node(key))

            assert_red_black_tree(tree)
            assert_parent_pointers_consistent(tree)

        actual_keys = get_binary_tree_keys(tree)
        assert_that(actual_keys, contains_inanyorder(*keys))
        actual_black_height = calculate_black_height(tree.root)
        assert_that(tree.bh, is_(equal_to(actual_black_height)))
Пример #22
0
    def test_joinable_rb_delete(self):
        tree, _, keys = get_random_red_black_tree(sentinel=None)
        tree.bh = calculate_black_height(tree.root)
        nodes = get_binary_tree_nodes(tree, sentinel=tree.nil)

        while nodes:
            node = random.choice(nodes)
            keys.remove(node.key)

            joinable_rb_delete(tree, node)

            assert_red_black_tree(tree)
            assert_parent_pointers_consistent(tree)
            actual_keys = get_binary_tree_keys(tree)
            assert_that(actual_keys, contains_inanyorder(*keys))
            actual_black_height = calculate_black_height(tree.root)
            assert_that(tree.bh, is_(equal_to(actual_black_height)))
            nodes = get_binary_tree_nodes(tree, sentinel=tree.nil)
Пример #23
0
    def test_joinable_rb_delete(self):
        tree, _, keys = get_random_red_black_tree(sentinel=None)
        tree.bh = calculate_black_height(tree.root)
        nodes = get_binary_tree_nodes(tree, sentinel=tree.nil)

        while nodes:
            node = random.choice(nodes)
            keys.remove(node.key)

            joinable_rb_delete(tree, node)

            assert_red_black_tree(tree)
            assert_parent_pointers_consistent(tree)
            actual_keys = get_binary_tree_keys(tree)
            assert_that(actual_keys, contains_inanyorder(*keys))
            actual_black_height = calculate_black_height(tree.root)
            assert_that(tree.bh, is_(equal_to(actual_black_height)))
            nodes = get_binary_tree_nodes(tree, sentinel=tree.nil)
Пример #24
0
    def test_rb_join(self):
        tree1, _, keys1 = get_random_red_black_tree(
            black_height=random.randint(0, 4),
            min_value=0,
            max_value=999,
            sentinel=None)
        tree1.bh = calculate_black_height(tree1.root)
        middle_key = random.randint(1000, 1999)
        x = Node(middle_key)
        tree2, _, keys2 = get_random_red_black_tree(
            black_height=random.randint(0, 4),
            min_value=2000,
            max_value=2999,
            sentinel=None)
        tree2.bh = calculate_black_height(tree2.root)

        actual_joined_tree = rb_join(tree1, x, tree2)

        assert_red_black_tree(actual_joined_tree)
        actual_keys = get_binary_tree_keys(actual_joined_tree)
        assert_that(actual_keys,
                    contains_inanyorder(*(keys1 + [middle_key] + keys2)))