def test_multiple_dequeue():
    q = Queue()
    q.enqueue('first value')
    q.enqueue('second value')
    q.dequeue()
    q.dequeue()
    assert q.front == None
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_peek_post_dequeue():
    q = Queue()
    q.enqueue("apples")
    q.enqueue("bananas")
    q.dequeue()
    actual = q.peek()
    expected = "bananas"
    assert actual == expected
Example #4
0
def test_dequeue():
    letters = Queue()
    letters.enqueue('A')
    letters.enqueue('B')
    letters.enqueue('C')
    assert letters.dequeue() == 'A'
    assert letters.dequeue() == 'B'
    assert letters.dequeue() == 'C'
    assert letters.dequeue() is None
Example #5
0
def test_stacks_and_queues_10 ():
    queue = Queue()
    queue.enquene('a')
    queue.enquene('b')
    queue.enquene('c')
    queue.dequeue()
    actual = queue.front.value
    expected = 'b'
    assert actual == expected
def test_exhausted():
    q = Queue()
    q.enqueue("apple")
    q.enqueue("banana")
    q.enqueue("cucumber")
    q.dequeue()
    q.dequeue()
    q.dequeue()
    actual = q.is_empty()
    expected = True
    assert actual == expected
def test_dequeue_until_empty():
    q = Queue()
    q.enqueue("apple")
    q.enqueue("banana")
    q.enqueue("cucumber")
    q.dequeue()
    q.dequeue()
    q.dequeue()
    actual = q.q_is_empty()
    expected = True
    assert actual == expected
Example #8
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 test_dequeue_multiple():
    q4 = Queue()
    q4.enqueue(7)
    q4.enqueue(5)
    q4.enqueue(3)
    q4.enqueue(1)
    q4.dequeue()
    q4.dequeue()
    q4.dequeue()
    q4.dequeue()
    assert q4.front == None
    assert q4.rear == None
    assert q4.is_empty()
Example #10
0
def test_can_successfully_empty_a_queue_after_multiple_dequeues():
    new_queue = Queue()
    new_queue.enqueue('One')
    new_queue.enqueue('Two')
    new_queue.enqueue('Three')
    new_queue.enqueue('Four')

    new_queue.dequeue()
    new_queue.dequeue()
    new_queue.dequeue()
    new_queue.dequeue()

    expected = True
    actual = new_queue.isempty()
    assert expected == actual
Example #11
0
    def breadth_first(self, starting_node, action_function=None):
        list_of_nodes = []
        breadth_queue = Queue()
        breadth_queue.enqueue(starting_node)
        starting_node.visited = True
        i = 1

        while not breadth_queue.is_empty():
            print(f"trip {i} through while loop")
            i += 1
            current_vertex = breadth_queue.dequeue()
            list_of_nodes.append(current_vertex)
            current_edges = self._adjacency_list[current_vertex]
            for edge in current_edges:
                if edge.vertex.visited == False:
                    breadth_queue.enqueue(edge.vertex)
                    edge.vertex.visited = True

        # NOTE: Doing this traversal method over the weekend, I choose to give each Vertex an attribute of visited that had a value of True or False.  During class on Monday, JB did say that some are set up this way.  However, he said he prefers to keep track of the visited nodes by using a variable of type set.  This prevents any possibility of leaving an item visited attribute as true.  The set variable would be cleared to length 0 at the start of each breadth traversal.
        for node in self._adjacency_list:
            node.visted = False

        list_of_values_of_nodes = list(map(lambda x: x.value, list_of_nodes))
        # attempts to get the passed in function to act on the list_of_nodes and thereby append to the list existing in the space from where this method was called is on the next line.
        # map(action_function(list_of_nodes))

        # return list_of_nodes
        return list_of_values_of_nodes
def test_dequeue_when_full():
    q = Queue()
    q.enqueue("apples")
    q.enqueue("bananas")
    actual = q.dequeue()
    expected = "apples"
    assert actual == expected
def test_dequeue():
    q = Queue()
    q.enqueue("apple")
    q.enqueue("banana")
    actual = q.dequeue()
    expected = "apple"
    assert actual == expected
def test_dequeue():
    q2 = Queue()
    q2.enqueue(7)
    q2.enqueue(5)
    q2.enqueue(3)
    q2.enqueue(1)
    assert q2.rear.value == 1
    assert q2.dequeue() == 7
    assert q2.front.value == 5
 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)
Example #16
0
 def traverse_breath_first(self):
     queue = Queue()
     curr = self.root
     queue.enqueue(curr)
     # import pdb; pdb.set_trace()
     while queue.is_empty():
         curr = queue.dequeue()
         if curr.child_left:
             queue.enqueue(curr.child_left)
         if curr.child_right:
             queue.enqueue(curr.child_right)
         yield (curr.value)
 def breath_first(self):
     rtn = []
     queue = Queue()
     curr = self.root
     queue.enqueue(curr)
     # import pdb; pdb.set_trace()
     while queue.is_empty():
         curr = queue.dequeue()
         if curr.child_left:
             queue.enqueue(curr.child_left)
         if curr.child_right:
             queue.enqueue(curr.child_right)
         rtn.append(curr.value)
     return rtn
    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(self) -> list:
     """ takes a Binary Tree as its unique input, traverse the input tree using a Breadth-first approach, and return a list of the values in the tree in the order they were encountered. """
     frontier = Queue()
     frontier.enqueue(self.root)
     explored = []
     current = None
     while not frontier.is_empty():
         current = frontier.dequeue()
         explored.append(current.value)
         if current.left:
             frontier.enqueue(current.left)
         if current.right:
             frontier.enqueue(current.right)
     return explored
 def find_max_value(self):
     max_value = self.root.value
     curr=self.root
     queue=Queue()
     queue.enqueue(curr)
     # import pdb; pdb.set_trace()
     while queue.is_empty():
         curr = queue.dequeue()
         if curr.value > max_value:
             max_value=curr.value
         if curr.child_left:
             queue.enqueue(curr.child_left)
         if curr.child_right:
             queue.enqueue(curr.child_right)
     return max_value 
Example #21
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 breadthOrder(self):
        '''
        This method prints out the tree using a breadth-first approach that steps across the width of the tree before descending another level.
        '''
        ordered_list = []

        tree_node_queue = Queue()
        tree_node_queue.enqueue(self.root)

        while not tree_node_queue.is_empty():
            tree_node_removed_from_queue = tree_node_queue.dequeue()
            ordered_list.append(tree_node_removed_from_queue.value)

            if tree_node_removed_from_queue.left_node:
                tree_node_queue.enqueue(tree_node_removed_from_queue.left_node)

            if tree_node_removed_from_queue.right_node:
                tree_node_queue.enqueue(
                    tree_node_removed_from_queue.right_node)

        return ordered_list
 def find_height(self):
     height_counter = 0
     marker= None
     curr = self.root
     queue = Queue()
     queue.enqueue(curr)
     check_queue = Queue()
     while queue.is_empty():
         curr=queue.dequeue()
         if curr.child_left:
             queue.enqueue(curr.child_left)
         if curr.child_right:
             queue.enqueue(curr.child_right)
         if marker is curr.value:
             marker= None
         if marker is None:
             if curr.child_left or curr.child_right:
                 if curr.child_left:
                     height_counter +=1  
                     marker = curr.child_left.value
                 if curr.child_right:
                     marker = curr.child_right.value
                     height_counter +=1
     return height_counter
    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_dequeue():
    q = Queue()
    q.enqueue('first value')
    q.enqueue('second value')
    assert q.dequeue() == 'first value'
def test_dequeue_empty_queue():
    q = Queue()
    assert q.dequeue() == 'this queue is empty buddy'
Example #28
0
def test_dequeue_on_empty_raises_exception():
    new_queue = Queue()
    expected = 'Exception'
    actual = new_queue.dequeue()
    assert expected == actual
def test_dequeue_when_empty():
    q = Queue()
    with pytest.raises(InvalidOperationError):
        q.dequeue()
def test_peek_empty_queue():
    queue = Queue()
    with pytest.raises(EmptyQueueException):
        queue.peek()
    with pytest.raises(EmptyQueueException):
        queue.dequeue()