def test_remove(self):
        linked = SinglyLinkedList(100)
        linked.append(200)
        linked.append(300)
        linked.remove(1)

        self.assertEqual(linked.as_list(), [100, 300])
    def test_remove_at_the_beginning_with_multiple_values(self):
        linked = SinglyLinkedList(100)
        linked.append(200)
        linked.append(300)
        linked.append(400)
        linked.remove(0)

        self.assertEqual(linked.as_list(), [200, 300, 400])
    def test_remove_at_the_end(self):
        linked = SinglyLinkedList(100)
        linked.append(200)
        linked.append(300)
        linked.append(400)
        linked.append(500)
        linked.remove(4)

        self.assertEqual(linked.as_list(), [100, 200, 300, 400])
예제 #4
0
def test_linked_list_many_items():
    """test_linked_list_many_items."""
    ll = SinglyLinkedList()
    numbers = [value for value in range(-100, 100)]
    for number in numbers:
        ll.prepend(number)
    print("Many items, ", ll)
    assert len(ll) == len(numbers)
    assert [node.item for node in ll] == numbers[-1::-1]
    assert all(number in ll for number in numbers)
    assert not any(
        number in ll for number in chain(range(-200, -100), range(100, 200)))
    assert ll.remove(500) is None
    assert all(ll.remove(value) is not None for value in numbers)
    assert not any(number in ll for number in numbers)
    assert len(ll) is 0
    for _ in ll:
        raise AssertionError("Collection should be empty, iterator returned.")
    print("Passed all tests for single item in linked list")
예제 #5
0
def test_linked_list_empty():
    """test_linked_list_empty."""
    ll = SinglyLinkedList()
    for _ in ll:
        raise AssertionError("Collection should be empty, iterator returned.")
    assert not any(value in ll for value in range(-100, 100))
    assert ll.remove(5) is None
    assert len(ll) is 0
    print("No items, ", ll)
    print("Passed all tests for empty linked list.")
예제 #6
0
def test_linked_list_single_item():
    """test_linked_list_single_item."""
    ll = SinglyLinkedList()
    ll.prepend(5)
    assert ll.head.item is 5
    print("One item, ", ll)
    for node in ll:
        assert node.item is 5
    assert 5 in ll
    assert not any(value in ll for value in range(-100, 100) if value is not 5)
    assert len(ll) is 1
    assert ll.remove(5) is 5
    assert 5 not in ll
    assert len(ll) is 0
    for _ in ll:
        raise AssertionError("Collection should be empty, iterator returned.")
    print("Passed all tests for single item in linked list")
class SinglyLinkedListQueue:
    def __init__(self, max_length):
        self._queue = SinglyLinkedList()
        self._length = 0
        self._max_length = max_length

    def enqueue(self, value):
        if self._length == self._max_length:
            raise ValueError("Overflow")
        self._length += 1
        self._queue.append(value)

    def dequeue(self):
        if self._length == 0:
            raise ValueError("Underflow")
        self._length -= 1
        return self._queue.remove(0).value

    def increase_max_length(self):
        self._max_length += 1

    def as_list(self):
        return self._queue.as_list()
    def test_remove_at_the_beginning(self):
        linked = SinglyLinkedList(100)
        linked.remove(0)

        self.assertEqual(linked.as_list(), [])
    def test_remove_raises_if_index_is_too_small(self):
        linked = SinglyLinkedList()

        with self.assertRaises(ValueError):
            linked.remove(0)