def test_1(self):
     """ Call push(), pop() and count() with probability 
     p1, p2 and p3.
     """
     dq = deque()
     stack = arrayStack();
     p1, p2, p3 = (0.4, 0.4, 0.2)
     count = 0
     stackSize = 0
     calls = 1000
     while (count < calls):
         r = random.uniform(0,1)
         if r < p1:
             dq.append(r)
             stack.push(r)
             count += 1
             stackSize += 1
         elif r < p1 + p2:
             if stackSize == 0:
                 continue
             self.assertEqual(dq.pop(), stack.pop())
             count += 1
             stackSize -= 1
         else:
             self.assertEqual(stackSize, stack.count())
 def test_2(self):
     """ Pop from an empty stack
     """
     stack = arrayStack()
     with self.assertRaises(IndexError):
         stack.pop()
     with self.assertRaises(IndexError):
         stack.top()
     count = 0
     calls = 1000
     while count < calls:
         procedure = [1,0] * 10
         random.shuffle(procedure)
         procedure = [1] + procedure + [0, 0]
         with self.assertRaises(IndexError):
             for p in procedure:
                 if p == 1:
                     stack.push(p)
                 else:
                     stack.pop()
         count += 1
 def test_init(self):
     stack = arrayStack();
     attr = ['isEmpty', 'count', 'push', 'pop', 'top']
     for a in attr:
         self.assertTrue(hasattr(stack, a))