(b *testing.B)
| 1121 | } |
| 1122 | |
| 1123 | func BenchmarkAndAny(b *testing.B) { |
| 1124 | runSet := func(name string, base *Bitmap, filters []*Bitmap) { |
| 1125 | var ( |
| 1126 | andFirstCard, orFirstCard, andAnyCard uint64 |
| 1127 | andFirstRan, orFirstRan, andAnyRan bool |
| 1128 | ) |
| 1129 | |
| 1130 | b.Run(name+"_or-first", func(b *testing.B) { |
| 1131 | andAnyRan = true |
| 1132 | for n := 0; n < b.N; n++ { |
| 1133 | clone := base.Clone() |
| 1134 | |
| 1135 | b.StartTimer() |
| 1136 | clone.And(FastOr(filters...)) |
| 1137 | orFirstCard = clone.GetCardinality() |
| 1138 | b.StopTimer() |
| 1139 | } |
| 1140 | }) |
| 1141 | |
| 1142 | b.Run(name+"_and-first", func(b *testing.B) { |
| 1143 | orFirstRan = true |
| 1144 | for n := 0; n < b.N; n++ { |
| 1145 | anded := make([]*Bitmap, 0, len(filters)) |
| 1146 | |
| 1147 | b.StartTimer() |
| 1148 | for _, f := range filters { |
| 1149 | anded = append(anded, And(base, f)) |
| 1150 | } |
| 1151 | andFirstCard = FastOr(anded...).GetCardinality() |
| 1152 | b.StopTimer() |
| 1153 | } |
| 1154 | }) |
| 1155 | |
| 1156 | b.Run(name+"_AndAny", func(b *testing.B) { |
| 1157 | andAnyRan = true |
| 1158 | for n := 0; n < b.N; n++ { |
| 1159 | clone := base.Clone() |
| 1160 | |
| 1161 | b.StartTimer() |
| 1162 | clone.AndAny(filters...) |
| 1163 | andAnyCard = clone.GetCardinality() |
| 1164 | b.StopTimer() |
| 1165 | } |
| 1166 | }) |
| 1167 | |
| 1168 | if andFirstRan && andAnyRan && andFirstCard != andAnyCard { |
| 1169 | b.Fatalf("Cardinalities don't match: %d, %d", andFirstCard, andAnyCard) |
| 1170 | } |
| 1171 | if orFirstRan && andAnyRan && orFirstCard != andAnyCard { |
| 1172 | b.Fatalf("Cardinalities don't match: %d, %d", orFirstCard, andAnyCard) |
| 1173 | } |
| 1174 | } |
| 1175 | |
| 1176 | r := rand.New(rand.NewSource(0)) |
| 1177 | |
| 1178 | genOne := func(r *rand.Rand, maxCount, domain int) *Bitmap { |
| 1179 | ret := NewBitmap() |
| 1180 | count := r.Intn(maxCount) + 5 |
nothing calls this directly
no test coverage detected
searching dependent graphs…