def test_remove_with_one_node():
    """Test remove if only one node."""
    from dll import Dll
    test_dll = Dll()
    test_dll.push('target')
    test_dll.remove('target')
    assert test_dll.head is None
def test_remove_head():
    dll = Dll()
    dll.append(500)
    dll.append(600)
    dll.append(700)
    dll.remove(500)
    assert dll.head.value == 600
    assert dll.head.next_node is dll.tail
    assert dll.head.prev is None
def test_remove_tail():
    dll = Dll()
    dll.insert(500)
    dll.insert(600)
    dll.insert(700)
    dll.remove(500)
    assert dll.tail.value == 600
    assert dll.tail.prev is dll.head
    assert dll.tail.next_node is None
def test_remove_to_ensure_node_no_longer_exists():
    """Test remove method to ensure node is gone once remove is called."""
    from dll import Dll
    test_dll = Dll()
    test_dll.push(11)
    test_dll.push('target')
    test_dll.push(34)
    test_dll.remove('target')
    with pytest.raises(ValueError):
        test_dll._linkedlist.search('target')
def test_remove():
    dll = Dll()
    dll.insert(500)
    dll.insert(600)
    back = dll.head
    dll.insert(700)
    dll.insert(800)
    front = dll.head
    dll.insert(900)
    dll.remove(700)
    assert back.prev is front
    assert front.next_node is back
def test_remove_head_of_list_with_multiple_nodes():
    """Test for remove method on list with multiple nodes."""
    from dll import Dll
    test_dll = Dll()
    test_dll.push(11)
    test_dll.push('target')
    check = test_dll.head
    assert test_dll.remove('target') == check
def test_remove_returns_node():
    """Test that correct node returned from search."""
    from dll import Dll
    test_dll = Dll()
    test_dll.push(11)
    test_dll.push('target')
    check = test_dll.head
    test_dll.push(34)
    assert test_dll.remove('target') == check
def test_remove_with_empty_list():
    """Test to ensure error raised if remove called on empty list."""
    from dll import Dll
    test_dll = Dll()
    with pytest.raises(IndexError):
        test_dll.remove('a thing')
def test_remove_not_found():
    dll = Dll()
    dll.append(600)
    dll.insert(700)
    with pytest.raises(LookupError):
        dll.remove(500)
def test_remove_empty():
    dll = Dll()
    with pytest.raises(LookupError):
        dll.remove(500)