go test -bench BenchmarkOrs -benchmem -run -
(b *testing.B)
| 145 | |
| 146 | // go test -bench BenchmarkOrs -benchmem -run - |
| 147 | func 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 | } |
nothing calls this directly
no test coverage detected
searching dependent graphs…