def test_all_items_are_returned_exactly_once(items):
    """We always get every item exactly once."""
    pq = NaivePriorityQueue()
    for item in items:
        pq.put(item)
    assert len(pq) == len(items)
    while len(pq) > 0:
        items.remove(pq.get())
    assert len(items) == 0
def test_items_are_returned_in_priority_order(items):
    """We always get the smallest item first."""
    pq = NaivePriorityQueue()
    for item in items:
        pq.put(item)
    assert len(pq) == len(items)
    current = pq.get()
    while len(pq) > 0:
        prior, current = current, pq.get()
        assert prior <= current
def mkpq(items):
    """Create and fill a NaivePriorityQueue."""
    pq = NaivePriorityQueue()
    [pq.put(item) for item in items]
    return pq
def test_put_only():
    """If the queue is empty, putting is trivial."""
    pq = NaivePriorityQueue()
    pq.put("a")
    assert pq._items == ["a"]