def __init__(self): pass # Pick one of these to use. # Stack must have the container you dont choose for Queue #self.container = LinkedList() self.container = ArrayDeque()
class Stack: def __init__(self): # Pick one of these to use. # Stack must have the container you dont choose for Queue #self.container = LinkedList() self.container = ArrayDeque() def push(self, data): self.container.push_back(data) def pop(self): return self.container.pop_back() def get_size(self): return self.container.get_size() def __str__(self): return str(self.container)
def test_insert_full(self): deque = ArrayDeque(5) [deque.push(i) for i in range(5)] with self.assertRaises(ValueError): deque.insert(1)
def test_peek_non_empty(self): deque = ArrayDeque() deque.insert(1) self.assertEqual(deque.peek(), 1)
def test_peek_empty(self): deque = ArrayDeque() with self.assertRaises(ValueError): deque.peek()
def test_head_non_empty(self): deque = ArrayDeque() deque.push(1) self.assertEqual(deque.head(), 1)
def test_head_empty(self): deque = ArrayDeque() with self.assertRaises(ValueError): deque.head()
return end - start if __name__ == '__main__': print('TEST_NUM: {}'.format(TEST_NUM)) queue = ArrayQueue(TEST_NUM) print('ArrayQueue, time: {:.3f} s'.format(queue_exec_time(queue))) queue = LinkedListQueue(TEST_NUM) print('LinkedListQueue, time: {:.3f} s'.format(queue_exec_time(queue))) queue = ArrayLoopQueue(TEST_NUM) print('ArrayLoopQueue, time: {:.3f} s'.format(queue_exec_time(queue))) queue = LinkedListLoopQueue(TEST_NUM) print('LinkedListLoopQueue, time: {:.3f} s'.format(queue_exec_time(queue))) deque = ArrayDeque(TEST_NUM) print('ArrayDeque, time: {:.3f} s'.format(deque_exec_time(deque))) deque = LinkedListDeque(TEST_NUM) print('LinkedListDeque, time: {:.3f} s'.format(deque_exec_time(deque))) deque = ArrayLoopDeque(TEST_NUM) print('ArrayLoopDeque, time: {:.3f} s'.format(deque_exec_time(deque))) deque = LinkedListLoopDeque(TEST_NUM) print('LinkedListLoopDeque, time: {:.3f} s'.format(deque_exec_time(deque)))
def test_composite2(self): deque = ArrayDeque() deque.push(1) deque.push(2) self.assertEqual(deque.remove(), 1) self.assertEqual(deque.remove(), 2)
def test_push_one(self): deque = ArrayDeque() deque.push(1) self.assertEqual(deque.list(), [1])
def test_fix_len_deque(self): deque = ArrayDeque(4) deque.push_tail(1) deque.push_front(2) assert deque.is_empty() == False assert deque.is_full() == False assert deque.capacity == 4 assert deque.__repr__() == 'ArrayDeque: front [2,1] tail' assert len(deque) == 2 assert deque.front() == 2 assert deque.tail() == 1 deque.push_tail(3) deque.push_front(4) assert deque.is_empty() == False assert deque.is_full() == True assert deque.capacity == 4 assert deque.__repr__() == 'ArrayDeque: front [4,2,1,3] tail' assert len(deque) == 4 assert deque.front() == 4 assert deque.tail() == 3 with pytest.raises(FullError): deque.push_front(1) with pytest.raises(FullError): deque.push_tail(2) assert deque.pop_front() == 4 assert deque.pop_front() == 2 assert deque.pop_tail() == 3 assert deque.pop_tail() == 1 assert deque.is_empty() == True assert deque.is_full() == False assert deque.capacity == 4 assert deque.__repr__() == 'ArrayDeque: front [] tail' assert len(deque) == 0 with pytest.raises(EmptyError): deque.front() with pytest.raises(EmptyError): deque.tail() with pytest.raises(EmptyError): deque.pop_front() with pytest.raises(EmptyError): deque.pop_tail()
def test_inf_empty_deque(self): deque = ArrayDeque() assert deque.is_empty() == True assert deque.is_full() == False assert deque.capacity == float('inf') assert deque.__repr__() == 'ArrayDeque: front [] tail' assert len(deque) == 0 with pytest.raises(EmptyError): deque.front() with pytest.raises(EmptyError): deque.tail() with pytest.raises(EmptyError): deque.pop_front() with pytest.raises(EmptyError): deque.pop_tail()
def test_fix_len_empty_deque(self): deque = ArrayDeque(0) assert deque.is_empty() == True assert deque.is_full() == True assert deque.capacity == 0 assert deque.__repr__() == 'ArrayDeque: front [] tail' assert len(deque) == 0 with pytest.raises(EmptyError): deque.front() with pytest.raises(EmptyError): deque.tail() with pytest.raises(EmptyError): deque.pop_front() with pytest.raises(EmptyError): deque.pop_tail() deque = ArrayDeque(3) assert deque.is_empty() == True assert deque.is_full() == False assert deque.capacity == 3 assert deque.__repr__() == 'ArrayDeque: front [] tail' assert len(deque) == 0 with pytest.raises(EmptyError): deque.front() with pytest.raises(EmptyError): deque.tail() with pytest.raises(EmptyError): deque.pop_front() with pytest.raises(EmptyError): deque.pop_tail()
def test_inf_deque(self): deque = ArrayDeque() deque.push_tail(1) deque.push_front(2) deque.push_front(3) deque.push_tail(4) assert deque.is_empty() == False assert deque.is_full() == False assert deque.capacity == float('inf') assert deque.__repr__() == 'ArrayDeque: front [3,2,1,4] tail' assert len(deque) == 4 assert deque.front() == 3 assert deque.tail() == 4 assert deque.pop_front() == 3 assert deque.pop_tail() == 4 assert deque.is_empty() == False assert deque.is_full() == False assert deque.capacity == float('inf') assert deque.__repr__() == 'ArrayDeque: front [2,1] tail' assert len(deque) == 2 assert deque.front() == 2 assert deque.tail() == 1 assert deque.pop_tail() == 1 assert deque.pop_front() == 2 assert deque.is_empty() == True assert deque.is_full() == False assert deque.capacity == float('inf') assert deque.__repr__() == 'ArrayDeque: front [] tail' assert len(deque) == 0 with pytest.raises(EmptyError): deque.front() with pytest.raises(EmptyError): deque.tail() with pytest.raises(EmptyError): deque.pop_front() with pytest.raises(EmptyError): deque.pop_tail()
def test_insert_one(self): deque = ArrayDeque() deque.insert(1) self.assertEqual(deque.list(), [1])
def test_composite1(self): deque = ArrayDeque() deque.push(1) deque.insert(2) deque.insert(3) deque.push(4) deque.insert(5) deque.push(6) self.assertEqual(deque.remove(), 5) deque.push(7) deque.insert(8) self.assertEqual(deque.pop(), 7) self.assertEqual(deque.list(), [6, 4, 1, 2, 3, 8])
def test_insert_two(self): deque = ArrayDeque() deque.insert(1) deque.insert(2) self.assertEqual(deque.list(), [1, 2])
def test_circle_deque_features(): deque = ArrayDeque() assert len(deque) == 0 assert deque.is_empty() == True deque.add_last(5) assert deque._array == [5] deque.add_first(3) assert deque._array == [3, 5] deque.add_first(7) assert deque._array == [7, 3, 5] assert deque.first() == 7 deque.del_last() assert len(deque) == 2 assert deque._array == [7, 3] deque.del_first() assert deque._array == [3] assert deque.is_empty() == False deque2 = ArrayDeque([1, 2, 3]) assert deque2._array == [1, 2, 3]
def test_push_two(self): deque = ArrayDeque() deque.push(1) deque.push(2) self.assertEqual(deque.list(), [2, 1])