Пример #1
0
def test_node_reports_balanced(nodes_to_insert, expected):
    values = iter(nodes_to_insert)
    n = PlainNode(next(values))
    for value in values:
        n.insert(value)

    assert n.balanced == expected
Пример #2
0
def test_node_delete_non_existing_value():
    n = PlainNode(0)
    n.insert(5)
    n.insert(10)
    n.insert (3)
    n.insert(-5)
    with pytest.raises(KeyError):
        n.delete(7)
Пример #3
0
def test_get_node_path_works(nodes_to_insert, key, expected):
    values = iter(nodes_to_insert)
    n = PlainNode(next(values))
    for value in values:
        n.insert(value)

    result = [node.value for node in n.get_node_path(key)]
    assert result == list(expected)
Пример #4
0
def test_node_get_non_existing_element_raises_keyerror():
    n = PlainNode(0)
    n.insert(5)
    n.insert(10)
    n.insert(7)
    with pytest.raises(KeyError) as error:
        n.get(8)
    assert True
Пример #5
0
def test_node_insert_replaces_value():
    n = PlainNode(0, "zero")
    n.insert(5, "five")
    n.insert(10, "ten")
    assert n.get(5) is n.right
    assert n.get(5).value == "five"
    assert len(n) == 3
    n.insert(5, "fake")
    assert n.get(5) is n.right
    assert n.get(5).value == "fake"
    assert len(n) == 3
Пример #6
0
def test_node_insert_can_create_new():
    n = PlainNode(0, "zero")
    n.insert(5, "five")
    n.insert(10, "ten")
    assert n.get(5).value == "five"
    assert len(n) == 3
    n.insert(5, "fake", replace=False)
    assert n.get(5).value == "five"  # Retrieves first inserted value
    assert len(n) == 4
    assert n.get(5).right.left.value == "fake"
Пример #7
0
def test_node_delete_root_two_branches():
    n = PlainNode(0)
    n.insert(5)
    n.insert(-5)
    n.delete(0)
    assert n.value in (5, -5)
    assert bool(n.left) ^ bool(n.right)
Пример #8
0
def test_node_get_non_existing_element_returns_path_to_closest(
    nodes_to_insert,
    search_value,
    expected_return_values
):
    values = iter(nodes_to_insert)
    n = PlainNode(next(values))
    for value in values:
        n.insert(value)

    closest_nodes = n.get_closest(search_value)

    assert closest_nodes[0].value == expected_return_values[0]
    assert closest_nodes[1].value == expected_return_values[1]
Пример #9
0
def test_node_insert_both_sides():
    n = PlainNode(0)
    n.insert(10)
    n.insert(-10)
    n.insert(5)
    assert n.right.value == 10
    assert n.left.value == -10
    assert n.right.left.value == 5
Пример #10
0
def test_node_value_equals_key_if_not_given():
    n = PlainNode(0)
    assert n.value == 0
    assert not n.left
    assert not n.right
    assert n.key_func is None
    assert n.leaf
Пример #11
0
def test_node_delete_branch():
    n = PlainNode(0)
    n.insert(5)
    n.insert(10)
    n.delete(5)
    assert n.value is 0
    assert n.right.value == 10
    assert n.right.depth == 1
    assert not n.right.left and not n.right.right
Пример #12
0
def test_node_len():
    n = PlainNode(0)
    assert len(n) == 1
    n.insert(10)
    assert len(n) == 2
    n.insert(5)
    assert len(n) == 3
    n.insert(-10)
    assert len(n) == 4
Пример #13
0
def test_node_delete_branch_2_leaves():
    n = PlainNode(0)
    n.insert(5)
    n.insert(10)
    n.insert (3)
    n.delete(5)
    assert n.value is 0
    assert n.right.value in (10, 3)
    assert n.right.depth == 2
    assert n.right.left and n.right.left.value == 3 or n.right.right and n.right.right.value == 10
    assert bool(n.right.left) ^ bool(n.right.right)
Пример #14
0
def test_node_delete_root_one_branch():
    n = PlainNode(0)
    n.insert(5)
    n.delete(0)
    assert n.value == 5
    assert n.depth == 1
    assert not n.left and not n.right
Пример #15
0
def test_traverse_to_side(nodes_to_insert, node_to_start, side, expected_last_node):
    values = iter(nodes_to_insert)
    n = PlainNode(next(values))
    for value in values:
        n.insert(value)

    path = n._traverse_to_side(n.get_node_path(node_to_start), side)
    if not path:
        assert expected_last_node is None
        return
    assert path[-1].value == expected_last_node
Пример #16
0
def test_node_insert_right_left():
    n = PlainNode(0)
    n.insert(10)
    n.insert(5)
    assert n.right.left.value == 5
Пример #17
0
def test_node_insert_right():
    n = PlainNode(0)
    n.insert(10)
    assert n.right.value == 10
    assert not n.left
    assert not n.leaf
Пример #18
0
def test_node_get_leave_value():
    n = PlainNode(0, "zero")
    n.insert(5, "five")
    assert n.get(5).value == "five"
Пример #19
0
def test_node_delete_root_single_node():
    n = PlainNode(0)
    assert not(n.delete(0))
Пример #20
0
def test_node_get_branch_identity():
    n = PlainNode(0)
    n.insert(5)
    n.insert(10)
    assert n.get(5) is n.right
Пример #21
0
def test_node_get_identity_or_value_independs_other_nodes():
    n = PlainNode(0, "zero")
    n.insert(5)
    n.insert(10, "ten")
    assert n.get(5).value == 5
Пример #22
0
def test_node_get_branch_value():
    n = PlainNode(0, "zero")
    n.insert(5, "five")
    n.insert(10, "ten")
    assert n.get(5).value == "five"
Пример #23
0
def test_node_insert_left():
    n = PlainNode(0)
    n.insert(-10)
    assert n.left.value == -10
    assert not n.right
    assert not n.leaf
Пример #24
0
def test_node_get_root_value():
    n = PlainNode(0, "zero")
    assert n.get(0).value == "zero"
Пример #25
0
def test_depth(values, expected):
    root = PlainNode(values[0])
    for v in values[1:]:
        root.insert(v)
    assert root.depth == expected
Пример #26
0
def test_node_get_root_identity():
    n = PlainNode(0)
    assert n.get(0) is n
Пример #27
0
def test_node_delete_leaf():
    n = PlainNode(0)
    n.insert(5)
    n.delete(5)
    assert not n.right
    assert not n.left
Пример #28
0
def test_node_iter():
    n = PlainNode(0)
    n.insert(5)
    n.insert(-5)
    n.insert(-3)
    assert [x.value for x in n] == [-5, -3, 0, 5]
Пример #29
0
def test_node_insert_right_right():
    n = PlainNode(0)
    n.insert(10)
    n.insert(20)
    assert n.right.right.value == 20
Пример #30
0
def test_node_get_leave_identity():
    n = PlainNode(0)
    n.insert(5)
    assert n.get(5) is n.right