(b *testing.B, impl data.ListImplementationType, size int)
| 132 | } |
| 133 | |
| 134 | func benchmarkListRange(b *testing.B, impl data.ListImplementationType, size int) { |
| 135 | list := data.NewList(impl) |
| 136 | |
| 137 | key := []byte("benchmark_key") |
| 138 | keyStr := string(key) |
| 139 | seqInfo := data.HeadTailSeq{Head: data.InitialListSeq, Tail: data.InitialListSeq + 1} |
| 140 | |
| 141 | // Pre-generate test data |
| 142 | testData := make([]struct { |
| 143 | newKey []byte |
| 144 | record *core.Record |
| 145 | }, size) |
| 146 | |
| 147 | for i := 0; i < size; i++ { |
| 148 | seq := seqInfo.GenerateSeq(false) |
| 149 | newKey := utils.EncodeListKey(key, seq) |
| 150 | testData[i].newKey = newKey |
| 151 | testData[i].record = &core.Record{Key: newKey, Value: testutils.GetTestBytes(i)} |
| 152 | } |
| 153 | |
| 154 | // Pre-populate with pre-generated data |
| 155 | for i := 0; i < size; i++ { |
| 156 | if err := list.Push(string(testData[i].newKey), testData[i].record, false); err != nil { |
| 157 | b.Fatal(err) |
| 158 | } |
| 159 | } |
| 160 | |
| 161 | b.ResetTimer() |
| 162 | for i := 0; i < b.N; i++ { |
| 163 | if _, err := list.LRange(keyStr, 0, size-1); err != nil { |
| 164 | b.Fatal(err) |
| 165 | } |
| 166 | } |
| 167 | } |
| 168 | |
| 169 | func BenchmarkList_LRange_DoublyLinkedList_1000(b *testing.B) { |
| 170 | benchmarkListRange(b, data.ListImplDoublyLinkedList, 1000) |
no test coverage detected