示例#1
0
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
示例#2
0
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
示例#3
0
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
示例#4
0
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
示例#5
0
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
示例#6
0
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
示例#7
0
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
示例#8
0
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]
示例#9
0
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 == []
示例#10
0
def test_asa_search_empty_asa_should_return_node():
    asa = ASA()
    found, _ = asa.search(10)
    assert found is False