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])
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")
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.")
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)