class AnimalQueue(object): def __init__(self): self.dogs = Queue() self.cats = Queue() self.order = 0 def enqueue(self, animal): animal.order = self.order self.order += 1 if isinstance(animal, Dog): self.dogs.enqueue(animal) if isinstance(animal, Cat): self.cats.enqueue(animal) def dequeue_any(self): if self.dogs.queue_empty(): return self.dequeue_cat() elif self.cats.queue_empty(): return self.dequeue_dog() elif self.dogs.peek().order < self.cats.peek().order: return self.dequeue_dog() else: return self.dequeue_cat() def dequeue_dog(self): return self.dogs.dequeue() def dequeue_cat(self): return self.cats.dequeue()
class TestQueueMethods(unittest.TestCase): def setUp(self): # Setup self.q = Queue(1) self.q.enqueue(2) self.q.enqueue(3) return def tearDown(self): #Clear For Next Test self.q = None def test_peek(self): self.assertEqual(self.q.peek(), 1) pass def test_enqueue(self): self.q.enqueue(4) self.assertEqual(self.q.peek(),1) pass def test_deque(self): self.assertEqual(self.q.dequeue(),1) self.assertEqual(self.q.dequeue(),2) self.assertEqual(self.q.dequeue(),3) pass def test_total(self): self.assertEqual(self.q.dequeue(),1) self.q.enqueue(4) self.assertEqual(self.q.dequeue(),2) self.assertEqual(self.q.dequeue(),3) self.assertEqual(self.q.dequeue(),4) self.q.enqueue(5) self.assertEqual(self.q.peek(),5) pass