MCPcopy
hub / github.com/RoaringBitmap/roaring / BenchmarkOrs

Function BenchmarkOrs

benchmark_test.go:147–205  ·  view source on GitHub ↗

go test -bench BenchmarkOrs -benchmem -run -

(b *testing.B)

Source from the content-addressed store, hash-verified

145
146// go test -bench BenchmarkOrs -benchmem -run -
147func BenchmarkOrs(b *testing.B) {
148
149 bms := []*Bitmap{}
150 maxCount := 50
151 domain := 100000000
152 bitmapCount := 100
153 for i := 0; i < bitmapCount; i++ {
154 newBm := NewBitmap()
155 count := rand.Intn(maxCount) + 5
156 for j := 0; j < count; j++ {
157 v := uint32(rand.Intn(domain))
158 newBm.Add(v)
159 }
160 bms = append(bms, newBm)
161 }
162 var twotwocard uint64
163 var fastcard uint64
164 var nextcard uint64
165
166 b.Run("two-by-two", func(b *testing.B) {
167 for n := 0; n < b.N; n++ {
168 newBm := NewBitmap()
169 for _, bm := range bms {
170 newBm.Or(bm)
171 }
172 twotwocard = newBm.GetCardinality()
173 }
174 b.StopTimer()
175 })
176
177 b.Run("fast", func(b *testing.B) {
178 for n := 0; n < b.N; n++ {
179 newBm := FastOr(bms...)
180 fastcard = newBm.GetCardinality()
181 }
182 b.StopTimer()
183 })
184
185 b.Run("next/add", func(b *testing.B) {
186 buf := make([]uint32, 100)
187 for n := 0; n < b.N; n++ {
188 newBm := NewBitmap()
189 for _, bm := range bms {
190 iter := bm.ManyIterator()
191 for vs := iter.NextMany(buf); vs != 0; vs = iter.NextMany(buf) {
192 newBm.AddMany(buf[:vs])
193 }
194 }
195 nextcard = newBm.GetCardinality()
196 }
197 b.StopTimer()
198 })
199 if fastcard != nextcard {
200 b.Fatalf("Cardinalities don't match: %d, %d", fastcard, nextcard)
201 }
202 if fastcard != twotwocard {
203 b.Fatalf("Cardinalities don't match: %d, %d", fastcard, twotwocard)
204 }

Callers

nothing calls this directly

Calls 8

AddMethod · 0.95
OrMethod · 0.95
GetCardinalityMethod · 0.95
AddManyMethod · 0.95
NewBitmapFunction · 0.70
FastOrFunction · 0.70
NextManyMethod · 0.65
ManyIteratorMethod · 0.45

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…