def test_enqueue_dequeue(): q = BucketPriorityQueue() q.enqueue(5, 'a') assert q == BucketPriorityQueue([(5, 'a')]) q.enqueue(4, 'b') assert q == BucketPriorityQueue([(4, 'b'), (5, 'a')]) assert q.dequeue() == (4, 'b') assert q == BucketPriorityQueue([(5, 'a')]) assert q.dequeue() == (5, 'a') assert q == BucketPriorityQueue() with pytest.raises(ValueError, match='empty'): _ = q.dequeue()
def test_same_priority_fifo(): a = (5, 'a') b = (5, 'b') for x, y in [(a, b), (b, a)]: q = BucketPriorityQueue() q.enqueue(*x) q.enqueue(*y) assert q assert q.dequeue() == x assert q assert q.dequeue() == y assert not q
def test_supports_arbitrary_offsets(): m = 1 << 60 q_neg = BucketPriorityQueue() q_neg.enqueue(-m + 0, 'b') q_neg.enqueue(-m - 4, 'a') q_neg.enqueue(-m + 4, 'c') assert list(q_neg) == [(-m - 4, 'a'), (-m, 'b'), (-m + 4, 'c')] q_pos = BucketPriorityQueue() q_pos.enqueue(m + 0, 'b') q_pos.enqueue(m + 4, 'c') q_pos.enqueue(m - 4, 'a') assert list(q_pos) == [(m - 4, 'a'), (m, 'b'), (m + 4, 'c')]