class AnimalShelter: def __init__(self): self.dogs = Queue() self.cats = Queue() self.counter = 0 def enqueue(self, *, name, species): if species in Animal.VALID_SPECIES: self.counter += 1 getattr(self, f"{species}s").push( Animal(name=name, species=species, counter=self.counter)) else: raise AttributeError("INVALID TYPE") def dequeue_cat(self): if self.cats.is_empty(): raise IndexError("EMPTY CAT QUEUE") else: return self.cats.pop().name def dequeue_dog(self): if self.dogs.is_empty(): raise IndexError("EMPTY DOG QUEUE") else: return self.dogs.pop().name def dequeue_any(self): if self.dogs.is_empty() and self.cats.is_empty(): raise IndexError("EMPTY QUEUE") elif self.dogs.is_empty(): return self.dequeue_cat() elif self.cats.is_empty(): return self.dequeue_dog() else: return self.dequeue_cat() if self.dogs.peek( ).counter > self.cats.peek().counter else self.dequeue_dog()
def test_peek(): queue = Queue() queue.enqueue(1) assert queue.peek() == 1
import sys sys.path.append('..') from my_queue import Queue # Setup q = Queue(1) q.enqueue(3) # Test peek # Should be 1 assert (q.peek() == 1), "Failed in q.peek()" # Test dequeue # Should be 1 assert (q.dequeue() == 1), "Failed in q.dequeue()" # Test enqueue q.enqueue(4) # Should be 3 assert (q.dequeue() == 3), "Failed in q.dequeue()" # Should be 4 assert (q.dequeue() == 4), "Failed in q.dequeue()" q.enqueue(5) # Should be 5 assert (q.peek() == 5), "Failed in q.peek()" print ("ALL TEST PASSED")