Beispiel #1
0
def test_rotate():
    # rotate when inplace = False
    ll = LinkedList([1, 2, 3, 4, 5, 6])
    rotated = ll.rotate_right(1, inplace=False)
    assert rotated.to_list() == [6, 1, 2, 3, 4, 5]
    assert isinstance(rotated._head, Node)
    assert rotated._head.get_data() == 6
    assert rotated[4] == 4
    rotated = ll.rotate_left(3, inplace=False)
    assert isinstance(rotated._head, Node)
    assert rotated.to_list() == [4, 5, 6, 1, 2, 3]
    assert rotated._head.get_data() == 4
    assert rotated[-1] == 3
    assert ll.to_list() == [1, 2, 3, 4, 5, 6]
    # rotate when inplace = True
    ll.rotate_right(1)
    assert ll.to_list() == [6, 1, 2, 3, 4, 5]
    assert isinstance(ll._head, Node)
    assert ll._head.get_data() == 6
    ll.rotate_left(3)
    assert ll.to_list() == [3, 4, 5, 6, 1, 2]
    assert ll._head.get_data() == 3
    assert isinstance(ll._head, Node)
Beispiel #2
0
def test_list_with_one_element(helper):
    val = helper.get_value()
    ll = LinkedList()
    ll.insert(0, val)
    assert isinstance(ll._head, Node)
    assert ll._head.get_data() == val
    assert ll._head.get_next() is None
    assert len(ll) == 1
    assert not ll.is_empty()
    assert val in ll
    assert [item for item in ll] == [val]
    assert ll.to_list() == [val]
    assert ll == ll.copy()
    assert ll == ll.reverse()
    # ==================== test rotate ====================
    assert ll == ll.rotate_left(helper.get_pos_int(), inplace=False)
    assert ll == ll.rotate_right(helper.get_pos_int(), inplace=False)
    # ==================== test operators ====================
    assert ll != LinkedList()
    assert ll > LinkedList()
    assert ll >= LinkedList()
    assert LinkedList() < ll
    assert LinkedList() <= ll
    # ==================== test add/remove ====================
    new_value = helper.get_value()
    ll.add_front(new_value)
    ll.remove_front()
    ll.add_end(new_value)
    ll.remove_end()
    assert ll == LinkedList([val])
    # ==================== test insert/split ====================
    with pytest.raises(IndexError):
        ll.insert(2, helper.get_value())
    with pytest.raises(IndexError):
        ll.insert(-1, helper.get_value())
    with pytest.raises(IndexError):
        ll.split(helper.get_pos_int(a=2))
Beispiel #3
0
def test_empty_linked_list(helper):
    EMPTY = "┌─\n│\n└─"  # represents empty LinkedList
    ll = LinkedList([])
    assert str(ll) == EMPTY
    assert ll._length == len(ll) == 0
    assert ll.is_empty()
    assert ll.to_list() == []
    assert [_ for _ in ll] == []
    assert len(ll.copy()) == 0
    assert len(ll.reverse()) == 0
    # =================== test operators ====================
    assert LinkedList() == LinkedList()
    assert ll == ll.copy()
    assert ll == ll.reverse()
    assert LinkedList() != LinkedList([helper.get_value()])
    assert LinkedList() < LinkedList([helper.get_value()])
    assert LinkedList() <= LinkedList([helper.get_value()])
    assert LinkedList([helper.get_value()]) > LinkedList()
    assert LinkedList([helper.get_value()]) >= LinkedList()
    # ==================== test count ====================
    assert ll.count(0) == 0
    assert ll.count(None) == 0
    assert ll.count(helper.get_value()) == 0
    assert ll.count(Node(helper.get_value())) == 0
    # ==================== test __contains__ ===================
    assert None not in ll
    assert Node(helper.get_value()) not in ll
    assert 0 not in ll
    assert helper.get_value() not in ll
    assert LinkedList() not in ll
    # ==================== test split ====================
    left_list, right_list = ll.split(0)
    assert str(left_list) == str(right_list) == EMPTY
    with pytest.raises(TypeError):
        ll.split(helper.get_string())
    with pytest.raises(TypeError):
        ll.split(helper.get_float())
    with pytest.raises(TypeError):
        ll.split(True)
    with pytest.raises(IndexError):
        ll.split(-1)
    with pytest.raises(IndexError):
        ll.split(helper.get_int())
    # ==================== test rotate ====================
    assert ll.rotate_left(helper.get_pos_int(), inplace=False) == ll
    assert ll.rotate_right(helper.get_pos_int(), inplace=False) == ll
    assert len(ll.rotate_left(helper.get_pos_int(), inplace=False)) == 0
    assert len(ll.rotate_right(helper.get_pos_int(), inplace=False)) == 0
    with pytest.raises(TypeError):
        ll.rotate_left(helper.get_string())
    with pytest.raises(TypeError):
        ll.rotate_right(helper.get_float())
    with pytest.raises(TypeError):
        ll.rotate_left([])
    with pytest.raises(ValueError):
        ll.rotate_left(helper.get_neg_int())
    with pytest.raises(ValueError):
        ll.rotate_right(helper.get_neg_int())
    # ==================== test remove/del ====================
    ll.remove_front()  # shouldn't raise any Error
    ll.remove_end()  # shouldn't raise any Error
    ll.remove(helper.get_value())
    ll.remove(helper.get_value(), False)
    with pytest.raises(TypeError):
        ll.remove(helper.get_value(), all=helper.get_string(1))
    with pytest.raises(IndexError):
        del ll[0]
    with pytest.raises(IndexError):
        del ll[helper.get_pos_int()]
    with pytest.raises(IndexError):
        del ll[helper.get_neg_int()]
    # ==================== test __getitem__ ====================
    with pytest.raises(IndexError):
        _ = ll[0]
    with pytest.raises(IndexError):
        _ = ll[helper.get_pos_int()]
    with pytest.raises(IndexError):
        _ = ll[helper.get_neg_int()]
    assert LinkedList() == ll[0:10]
    # ==================== test insert/set ====================
    with pytest.raises(IndexError):
        ll.insert(helper.get_pos_int(), helper.get_value())
    with pytest.raises(IndexError):
        ll.insert(helper.get_neg_int(), helper.get_value())
    with pytest.raises(IndexError):
        ll[0] = helper.get_float()
    with pytest.raises(IndexError):
        ll[helper.get_int()] = Node(helper.get_float())
    with pytest.raises(ValueError):
        ll.insert(0, None)