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
Beispiel #2
0
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
Beispiel #4
0
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
Beispiel #5
0
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
Beispiel #7
0
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)
Beispiel #11
0
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
Beispiel #13
0
    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()
Beispiel #17
0
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
Beispiel #19
0
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()
Beispiel #22
0
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'
Beispiel #26
0
def test_peek_on_empty_raises_exception():
    new_queue = Queue()
    expected = 'Exception'
    actual = new_queue.peek()
    assert expected == actual