| 57 | } |
| 58 | |
| 59 | func TestTPQStress(t *testing.T) { |
| 60 | t.Parallel() |
| 61 | tpq := NewTimePriorityQueue[val]() |
| 62 | start := time.Now() |
| 63 | |
| 64 | totalEnqueued := 0 |
| 65 | totalEnqueuedSum := 0 |
| 66 | |
| 67 | go func() { |
| 68 | ctx, _ := context.WithDeadline(context.Background(), start.Add(1*time.Second)) |
| 69 | for ctx.Err() == nil { |
| 70 | v := rand.Intn(100) + 1 |
| 71 | tpq.Enqueue(time.Now().Add(time.Duration(rand.Intn(1000)-500)*time.Millisecond), rand.Intn(5), val{v}) |
| 72 | totalEnqueuedSum += v |
| 73 | totalEnqueued++ |
| 74 | } |
| 75 | }() |
| 76 | |
| 77 | ctx, _ := context.WithDeadline(context.Background(), start.Add(3*time.Second)) |
| 78 | totalDequeued := 0 |
| 79 | sum := 0 |
| 80 | for ctx.Err() == nil || totalDequeued < totalEnqueued { |
| 81 | v := tpq.Dequeue(ctx) |
| 82 | if v.v != 0 { |
| 83 | totalDequeued++ |
| 84 | sum += v.v |
| 85 | } |
| 86 | } |
| 87 | |
| 88 | if totalDequeued != totalEnqueued { |
| 89 | t.Errorf("expected totalDequeued to be %d, got %d", totalEnqueued, totalDequeued) |
| 90 | } |
| 91 | |
| 92 | if sum != totalEnqueuedSum { |
| 93 | t.Errorf("expected sum to be %d, got %d", totalEnqueuedSum, sum) |
| 94 | } |
| 95 | } |
| 96 | |
| 97 | func TestTPQRemove(t *testing.T) { |
| 98 | t.Parallel() |