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
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
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_pop(self): single_list = SingleList([]) with pytest.raises(IndexError): single_list.pop() single_list = SingleList([1, 2, 3]) with pytest.raises(IndexError): single_list.pop(3) with pytest.raises(IndexError): single_list.pop(-1) assert single_list.pop().val == 3 assert single_list.pop(0).val == 1 assert single_list.tail.val == 2 assert single_list.head.val == 2 assert len(single_list) == 1 assert single_list.pop().val == 2 assert single_list.tail == None assert single_list.head == None assert len(single_list) == 0 single_list = SingleList([1, 2, 3]) assert single_list.pop(1).val == 2 assert single_list.tail.val == 3 assert single_list.head.val == 1 assert len(single_list) == 2