def test_lifo(): stack = Stack() stack.push(5) stack.push(6) assert stack.pop() == 6 assert stack.pop() == 5
def stack_reverse(l): s = Stack(len(l)) for e in l: s.push(e) r = [] while not s.is_empty(): r.append(s.pop()) return r
def test_push_pop_empty(): stack = Stack() assert stack.empty() stack.push(5) assert stack.pop() == 5 assert stack.empty()
def test_capacity(): # Create a stack that can hold a single element only. stack = Stack(1) assert stack.empty() stack.push(5) # Attempting to push an additional item should fail. with pytest.raises(TypeError) as e_info: stack.push(6)
class StackSizeTestCase(unittest.TestCase): def setUp(self): self.stack = Stack() def test_size_should_return_the_number_of_items_in_the_stack(self): self.assertEqual(self.stack.size(), 0) self.stack.push(1) self.assertEqual(self.stack.size(), 1) self.stack.push(2) self.assertEqual(self.stack.size(), 2) self.stack.pop() self.assertEqual(self.stack.size(), 1) self.stack.peek() self.assertEqual(self.stack.size(), 1)
class StackPeekTestCase(unittest.TestCase): def setUp(self): self.stack = Stack() self.stack.push(1) self.stack.push(2) self.stack.push(3) def test_peek_should_return_the_last_item_of_its_items_list(self): self.assertEqual(self.stack.peek(), 3) self.assertEqual(self.stack.peek(), 3) self.assertEqual(self.stack.peek(), 3) def test_peek_should_return_none_if_stack_is_already_empty(self): self.stack.pop() self.stack.pop() self.stack.pop() self.assertEqual(self.stack.peek(), None) def test_peek_should_not_decrement_stack_size(self): self.stack.peek() self.assertEqual(self.stack.size(), 3)
class StackPushTestCase(unittest.TestCase): def setUp(self): self.stack = Stack() def test_push_should_add_item_to_the_end_of_items_list(self): self.stack.push(1) self.assertEqual(self.stack.items[0], 1) self.stack.push(2) self.assertEqual(self.stack.items[1], 2) def test_push_should_increment_stack_size(self): self.stack.push(1) self.assertEqual(self.stack.size(), 1)
import stdio import math from arraystack import Stack #----------------------------------------------------------------------- # Read a fully parenthesized numeric expression from standard input, # evaluate it, and write the resulting number to standard output. ops = Stack() values = Stack() while not stdio.isEmpty(): token = stdio.readString() if token == '+': ops.push(token) elif token == '-': ops.push(token) elif token == '*': ops.push(token) elif token == 'sqrt': ops.push(token) elif token == ')': # Pop, evaluate, and push result. op = ops.pop() value = values.pop() if op == '+': value = values.pop() + value elif op == '-': value = values.pop() - value elif op == '*': value = values.pop() * value elif op == 'sqrt': value = math.sqrt(value) values.push(value) elif token != '(': # Token not operator or paren, so push float value. values.push(float(token))