@@ -441,6 +441,60 @@ func newQueueWithTimeForwarder() (_ *priorityqueue[string], _ *fakeMetricsProvid
441441 }
442442}
443443
444+ func TestHighPriorityItemsAreReturnedBeforeLowPriorityItemMultipleTimes (t * testing.T ) {
445+ t .Parallel ()
446+ synctest .Test (t , func (t * testing.T ) {
447+ g := NewWithT (t )
448+
449+ q , metrics := newQueue ()
450+ defer q .ShutDown ()
451+
452+ const itemsPerPriority = 1000
453+ lowPriority := 0
454+ lowMiddlePriority := 5
455+ middlePriority := 10
456+ upperMiddlePriority := 15
457+ highPriority := 20
458+ for i := range itemsPerPriority {
459+ q .AddWithOpts (AddOpts {Priority : & highPriority }, fmt .Sprintf ("high-%d" , i ))
460+ q .AddWithOpts (AddOpts {Priority : & upperMiddlePriority }, fmt .Sprintf ("upperMiddle-%d" , i ))
461+ q .AddWithOpts (AddOpts {Priority : & middlePriority }, fmt .Sprintf ("middle-%d" , i ))
462+ q .AddWithOpts (AddOpts {Priority : & lowMiddlePriority }, fmt .Sprintf ("lowMiddle-%d" , i ))
463+ q .AddWithOpts (AddOpts {Priority : & lowPriority }, fmt .Sprintf ("low-%d" , i ))
464+ }
465+ synctest .Wait ()
466+
467+ for range itemsPerPriority {
468+ key , prio , _ := q .GetWithPriority ()
469+ g .Expect (prio ).To (Equal (highPriority ))
470+ g .Expect (key ).To (HavePrefix ("high-" ))
471+ }
472+ for range itemsPerPriority {
473+ key , prio , _ := q .GetWithPriority ()
474+ g .Expect (prio ).To (Equal (upperMiddlePriority ))
475+ g .Expect (key ).To (HavePrefix ("upperMiddle-" ))
476+ }
477+ for range itemsPerPriority {
478+ key , prio , _ := q .GetWithPriority ()
479+ g .Expect (prio ).To (Equal (middlePriority ))
480+ g .Expect (key ).To (HavePrefix ("middle-" ))
481+ }
482+ for range itemsPerPriority {
483+ key , prio , _ := q .GetWithPriority ()
484+ g .Expect (prio ).To (Equal (lowMiddlePriority ))
485+ g .Expect (key ).To (HavePrefix ("lowMiddle-" ))
486+ }
487+ for range itemsPerPriority {
488+ key , prio , _ := q .GetWithPriority ()
489+ g .Expect (prio ).To (Equal (lowPriority ))
490+ g .Expect (key ).To (HavePrefix ("low-" ))
491+ }
492+ g .Expect (metrics .depth ["test" ]).To (Equal (map [int ]int {10 : 0 , 5 : 0 , 0 : 0 , 20 : 0 , 15 : 0 }))
493+ g .Expect (metrics .adds ["test" ]).To (Equal (itemsPerPriority * 5 ))
494+ g .Expect (metrics .retries ["test" ]).To (Equal (0 ))
495+ })
496+ }
497+
444498func newQueue () (* priorityqueue [string ], * fakeMetricsProvider ) {
445499 metrics := newFakeMetricsProvider ()
446500 q := New ("test" , func (o * Opts [string ]) {
0 commit comments