def test_should_return_false_for_given_asa_trees(elements): asa = ASA() for e in elements: asa.insert(e) found, _ = asa.search(10) assert found is False
def test_should_delete_empty_leaf_when_parent_got_two_elements( delete_key, parent_key, ch_index): asa = ASA() for i in range(5): asa.insert(i) assert asa.delete(delete_key) # check if structure is preserved values = [i for i in range(5) if i != delete_key] asa_values = [el.key for el in asa.sorted_d_queue] assert values == asa_values _, parent = asa.search(parent_key) assert parent == asa.root assert len(parent.keys) == 1 p_keys = parent.keys ch_1, ch_2 = parent.children assert ch_1.keys[0].key < p_keys[0].key < ch_2.keys[0].key assert ch_1.keys[0].key < ch_2.keys[0].key child_with_two_keys = parent.children[ch_index] assert len(child_with_two_keys.keys) == 2 assert len(parent.children[int(bool(1 - ch_index))].keys) == 1
def test_delete_should_handle_deleting_non_leaf_in_one_level_tree_case( elem, node_elem): asa = ASA() for i in range(3): asa.insert(i) asa.insert(elem) _, node = asa.search(node_elem) assert len(node.keys) == 2 assert asa.delete(1) assert elem in asa.root.keys elem, node = asa.search(node_elem) assert len(node.keys) == 1
def test_delete_should_replace_deleted_node_key_with_leaf_key_when_proper_leaf_key_found( elem, node_elem): asa = ASA() for i in range(13): asa.insert(i) # this will be predecessor or successor of 7 asa.insert(elem) _, node = asa.search(node_elem) assert len(node.keys) == 2 assert asa.delete(7) assert elem in asa.root.keys elem, node = asa.search(node_elem) assert len(node.keys) == 1
def test_delete_should_work_for_existing_duplicated_key( elements, delete_key, count): asa = ASA() for key in elements: asa.insert(key) del_key, _ = asa.search(delete_key) assert asa.delete(delete_key) assert del_key.count == count
def test_delete_should_remove_key_from_node_with_two_keys_without_rebalancing_v2( ): asa = ASA() for i in [2, 3, 5, 7, 8, 9, 10, 11]: asa.insert(i) assert asa.delete(10) found, node = asa.search(10) assert found is False and node is None assert [e.key for e in asa.sorted_d_queue] == [2, 3, 5, 7, 8, 9, 11] found, node = asa.search(11) assert found assert node.parent.keys == [9] assert node.leaf is True
def test_should_return_element_for_given_asa_trees_and_search_keys( elements, key): asa = ASA() for e in elements: asa.insert(e) found, _ = asa.search(key) assert found assert found.key == key
def test_asa_should_have_proper_parent_element_structure(): asa = ASA() for key in [2, 3, 5, 7, 8, 9, 10, 11]: asa.insert(key) elem, node = asa.search(11) assert node.parent.keys == [9] grandparent = node.parent.parent assert grandparent == asa.root assert asa.root.keys == [7]
def test_should_colapse_structure_when_parent_has_one_hey_and_sibling_also_has_only_one_key( delete_key, parent_key): asa = ASA() for i in range(3): asa.insert(i) assert asa.delete(delete_key) # check if structure is preserved values = [i for i in range(3) if i != delete_key] asa_values = [el.key for el in asa.sorted_d_queue] assert values == asa_values _, parent = asa.search(parent_key) assert asa.root == parent assert len(parent.keys) == 2 assert parent.children == []
def test_asa_search_empty_asa_should_return_node(): asa = ASA() found, _ = asa.search(10) assert found is False