def test_head_tail(self): single_list = SingleList([]) assert single_list.head is None assert single_list.tail is None node1 = Node(1) single_list.add_last(node1) assert single_list.head is node1 assert single_list.tail is node1 single_list.pop() assert single_list.head is None assert single_list.tail is None node2 = Node(2) single_list.add_first(node1) single_list.add_last(node2) assert single_list.head is node1 assert single_list.tail is node2 single_list = SingleList([1, 2, 3]) assert single_list.head.val is 1 assert single_list.tail.val is 3 single_list += SingleList([4, 5, 6]) assert single_list.head.val is 1 assert single_list.tail.val is 6 single_list += SingleList([]) assert single_list.head.val is 1 assert single_list.tail.val is 6
class LinkedListStack: def __init__(self): self._data = SingleList() def __repr__(self): return 'Stack: bottom [{}] top'.format(','.join( map(lambda node: str(node.val), self._data))) def __len__(self): return len(self._data) def push(self, e): self._data.add_last(Node(e)) def pop(self): if self.is_empty(): raise EmptyError('Stack is empty') return self._data.pop().val def top(self): if self.is_empty(): raise EmptyError('Stack is empty') return self._data[-1].val def is_empty(self): return len(self) == 0
def test_len(self): single_list = SingleList([]) assert len(single_list) == 0 single_list = SingleList([1, 2, 3]) assert len(single_list) == 3 single_list.add_last(Node(0)) assert len(single_list) == 4 single_list.pop() assert len(single_list) == 3
def test_add_last(self): single_list = SingleList([]) with pytest.raises(TypeError): single_list.add_last(1) single_list.add_last(Node(1)) assert single_list == SingleList([1]) single_list.add_last(Node(2)) assert single_list == SingleList([1, 2]) assert len(single_list) == 2