class AnimalShelter(): def __init__(self): self.cat_queue = Queue() self.dog_queue = Queue() self.animals_served = 0 def enqueue(self, incoming_animal): type_of_animal = type(incoming_animal) # https://docs.python.org/3/library/functions.html#type self.animals_served += 1 incoming_animal.animal_id = self.animals_served if type_of_animal == Cat: self.cat_queue.enqueue(incoming_animal) elif type_of_animal == Dog: self.dog_queue.enqueue(incoming_animal) else: raise InvalidOperationError("Sorry, we don't accept that type of animal here.") def dequeue(self, request_type = None): if request_type == "cat": return self.cat_queue.dequeue() elif request_type == "dog": return self.dog_queue.dequeue() elif request_type == None: #which queue is older? next_cat = self.cat_queue.peek().animal_id next_dog = self.dog_queue.peek().animal_id if next_cat < next_dog: return self.cat_queue.dequeue() else: return self.dog_queue.dequeue() else: return None
def test_queue_peek(): letters = Queue() assert not letters.peek() letters.enqueue('A') assert letters.peek() == 'A' letters.enqueue('B') assert letters.peek() == 'A'
def test_enqueue_two(): q = Queue() q.enqueue("apples") q.enqueue("bananas") actual = q.peek() expected = "apples" assert actual == expected
def test_can_successfully_dequeue_out_of_a_queue_the_expected_value(): new_queue = Queue() new_queue.enqueue('Three') new_queue.enqueue('Two') new_queue.enqueue('One') expected = 'Three' actual = new_queue.peek() assert expected == actual
def test_can_successfully_enqueue_multiple_values_into_a_queue(): new_queue = Queue() new_queue.enqueue('Three') new_queue.enqueue('Two') new_queue.enqueue('One') expected = 'Three' actual = new_queue.peek() assert expected == actual
def test_peek(): q = Queue() q.enqueue("apple") q.enqueue("banana") q.enqueue("cucumber") actual = q.peek() expected = "apple" assert actual == expected
def test_stacks_and_queues_11 (): queue = Queue() queue.enquene('a') queue.enquene('b') queue.enquene('c') actual = queue.peek() expected = 'a' assert actual == expected
def test_peek_queue(): q3 = Queue() q3.enqueue(1) q3.enqueue(3) q3.enqueue(5) q3.enqueue(7) assert q3.peek() == 1 assert not q3.is_empty()
def test_peek_post_dequeue(): q = Queue() q.enqueue("apples") q.enqueue("bananas") q.dequeue() actual = q.peek() expected = "bananas" assert actual == expected
def traverse_breadth_first(self): q = Queue() q.enqueue(self.root) while q.peek(): curr = q.dequeue() yield curr.value if curr.l_child: q.enqueue(curr.l_child) if curr.r_child: q.enqueue(curr.r_child)
def test_stacks_and_queues_12 (): queue = Queue() queue.enquene('a') queue.enquene('b') queue.enquene('c') queue.dequeue() queue.dequeue() queue.dequeue() actual = queue.peek() expected = None assert actual == expected
def breadth_traverse(self): """ Breadth-first traversal of binary tree """ output = [] q = Queue() q.enqueue(self.root) while q.peek(): curr = q.dequeue() output.append(curr.value) if curr.l_child: q.enqueue(curr.l_child) if curr.r_child: q.enqueue(curr.r_child) return output
def breadth_first_traverse(self, start_vert): """ Returns a list of graph vertex values in breadth-first order :param start_vert: Vertex object :returns: list of vertex values """ q = Queue() output = [] q.enqueue(start_vert) start_vert.visited = True while q.peek(): vert = q.dequeue() output.append(vert.value) for v, w in vert.adjacencies: if not v.visited: q.enqueue(v) v.visited = True self._reset_visited() return output
def traverse(self, node, debug=False): queue = Queue() ret_baby = [] if not node: return 'babies' visited = {} queue.enqueue(node) while queue.peek(): current = queue.dequeue() visited[current] = True if current == 'this queue is empty buddy': break for baby_node in self._adjacency_list[current]: if baby_node == None: break if not baby_node in visited: queue.enqueue(baby_node) ret_baby.append(current.value) if debug: breakpoint() return ret_baby
def breadth_first(self, start): """This method does a breadth first traversal of a graph Arguments: node -- [starting poing of the traversal] Returns: [list] -- [a list of all connected nodes] """ explored = [] queue = Queue() queue.enqueue(start) while queue.peek() is not None: node = queue.dequeue() if node not in explored: explored.append(node) neighbors = self._graph[node] for neighbor in neighbors: queue.enqueue(neighbor[0]) return explored
def test_peek_queue_from_empty(): q7 = Queue() assert q7.is_empty() with pytest.raises(AttributeError): q7.peek()
def test_can_successfully_peek_into_a_queue_seeing_the_expected_value(): new_queue = Queue() new_queue.enqueue('Three') expected = 'Three' actual = new_queue.peek() assert expected == actual
def test_queue_peek(): queue5 = Queue() queue5.enqueue(5) assert queue5.peek() == 5 assert queue5.back.val == 5 assert queue5.front.val == 5
def test_stacks_and_queues_14 (): queue = Queue() actual = queue.peek() expected = None assert actual == expected
def test_queue_peek_exception(): queue6 = Queue() with pytest.raises(Exception) as excep: queue6.peek() assert "EmptyQueue" in excep
def test_peek_empty_queue(): queue = Queue() with pytest.raises(EmptyQueueException): queue.peek() with pytest.raises(EmptyQueueException): queue.dequeue()
def test_can_successfully_enqueue_into_a_queue(): new_queue = Queue() new_queue.enqueue('One') expected = 'One' actual = new_queue.peek() assert expected == actual
def test_peek_empty_queue(): q = Queue() assert q.peek() == 'this queue is empty buddy'
def test_peek_when_empty(): q = Queue() with pytest.raises(InvalidOperationError): q.peek()
def test_queue_peek(): q = Queue() q.enqueue('first value') q.enqueue('second value') assert q.peek() == 'first value'
def test_peek_on_empty_raises_exception(): new_queue = Queue() expected = 'Exception' actual = new_queue.peek() assert expected == actual