def test_stack_init(self): stk = Stack() self.assertEqual(stk.size(), 0) self.assertEqual(stk.is_empty(), True) with self.assertRaises(IndexError): stk.pop() with self.assertRaises(IndexError): stk.peek()
def test_stack_pop(self): stk = Stack() random_values = get_random_values() for v in random_values: stk.push(v) for v in random_values[::-1]: stk.pop() self.assertEqual(stk.is_empty(), True) with self.assertRaises(IndexError): stk.pop() with self.assertRaises(IndexError): stk.peek()
def test_peeking_at_stack_does_not_remove_item(): stack = Stack() stack.push(1) assert_equal(stack.empty(), False) assert_equal(stack.peek(), 1) assert_equal(stack.empty(), False)
def test_peeking_at_stack_returns_last_item(): stack = Stack() stack.push(1) stack.push(2) stack.push(3) assert_equal(stack.peek(), 3)
def test_pushing_to_stack_adds_item_to_stack(): stack = Stack() assert_equal(stack.empty(), True) stack.push(1) assert_equal(stack.empty(), False) assert_equal(stack.peek(), 1)
def test_stack_peek(self): stk = Stack() random_values = get_random_values() for v in random_values: stk.push(v) for v in random_values[::-1]: self.assertEqual(stk.peek(), v) stk.pop()
def test_stack_push(self): stk = Stack() random_values = get_random_values() for v in random_values: stk.push(v) self.assertEqual(stk.is_empty(), False) self.assertEqual(stk.peek(), v) self.assertEqual(stk.pop(), v)
def test_stack_reverse(self): stk = Stack() random_values = get_random_values() for v in random_values: stk.push(v) stk.reverse() for v in random_values: self.assertEqual(stk.peek(), v) stk.pop()
class MinStack: def __init__(self): self.mins = Stack() self.items = Stack() def push(self, item): min = self.mins.peek() if min == None or item < min: self.mins.push(item) return self.items.push(item) def pop(self): item = self.items.pop() if item == self.mins.peek(): self.mins.pop() return item def min(self): return self.mins.peek()
def test_peeking_at_empty_stack_returns_none(): stack = Stack() assert_equal(stack.peek(), None)