(t *testing.T)
| 62 | } |
| 63 | |
| 64 | func TestQueuePushPopSingleGoroutine(t *testing.T) { |
| 65 | t.Parallel() |
| 66 | seed := time.Now().UnixNano() |
| 67 | t.Log("seed:", seed) |
| 68 | r := rand.New(rand.NewSource(seed)) |
| 69 | |
| 70 | const maxSize = 500 |
| 71 | const maxIters = 50 |
| 72 | |
| 73 | for maxCount := 1; maxCount < maxSize; maxCount++ { |
| 74 | queue := newWriteJobQueue(maxCount, 1+(r.Int()%maxCount)) |
| 75 | |
| 76 | elements := 0 // total elements in the queue |
| 77 | lastWriteID := 0 |
| 78 | lastReadID := 0 |
| 79 | |
| 80 | for range maxIters { |
| 81 | if elements < maxCount { |
| 82 | toWrite := r.Int() % (maxCount - elements) |
| 83 | if toWrite == 0 { |
| 84 | toWrite = 1 |
| 85 | } |
| 86 | |
| 87 | for i := 0; i < toWrite; i++ { |
| 88 | lastWriteID++ |
| 89 | require.True(t, queue.push(chunkWriteJob{seriesRef: HeadSeriesRef(lastWriteID)})) |
| 90 | |
| 91 | elements++ |
| 92 | } |
| 93 | } |
| 94 | |
| 95 | if elements > 0 { |
| 96 | toRead := r.Int() % elements |
| 97 | if toRead == 0 { |
| 98 | toRead = 1 |
| 99 | } |
| 100 | |
| 101 | for i := 0; i < toRead; i++ { |
| 102 | lastReadID++ |
| 103 | |
| 104 | j, b := queue.pop() |
| 105 | require.True(t, b) |
| 106 | require.Equal(t, HeadSeriesRef(lastReadID), j.seriesRef) |
| 107 | |
| 108 | elements-- |
| 109 | } |
| 110 | } |
| 111 | |
| 112 | require.Equal(t, elements, queue.length()) |
| 113 | queue.assertInvariants(t) |
| 114 | } |
| 115 | } |
| 116 | } |
| 117 | |
| 118 | func TestQueuePushBlocksOnFullQueue(t *testing.T) { |
| 119 | t.Parallel() |
nothing calls this directly
no test coverage detected
searching dependent graphs…