Skip to content

Commit b01912e

Browse files
committed
benchmark groups with fixed sizes
1 parent 2dc2311 commit b01912e

File tree

1 file changed

+59
-74
lines changed

1 file changed

+59
-74
lines changed

bitvec_test.go

Lines changed: 59 additions & 74 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package bitvec
22

33
import (
4+
"fmt"
45
"math/rand"
56
"testing"
67
)
@@ -9,6 +10,8 @@ var GoodSets = []uint64{0, 1, 2, 3, 4, 5, 10, 11, 20, 50, 89, 98, 99}
910
var UnSets = []uint64{6, 7, 9, 96, 97}
1011
var BadSets = []uint64{100, 101, 200, 1000}
1112

13+
var setSizes = []int{13, 256, 65536, 16777216}
14+
1215
func TestBV(t *testing.T) {
1316
bv := New(100)
1417
abv := NewAtomic(100)
@@ -59,84 +62,66 @@ func TestBV(t *testing.T) {
5962

6063
}
6164

62-
// func TestAtomicBV(t *testing.T) {
63-
// for _, k := range GoodSets {
64-
// if !bv.TrySet(k) {
65-
// t.Errorf("Error: could not set good index %d", k)
66-
// }
67-
// }
68-
// for _, k := range BadSets {
69-
// if bv.TrySet(k) {
70-
// t.Errorf("Error: successfully set bad index %d ", k)
71-
// }
72-
// }
73-
74-
// for _, k := range UnSets {
75-
// if x, _ := bv.Get(k); x {
76-
// t.Errorf("Error: bit %d was not supposed to be set but was", k)
77-
// }
78-
// }
79-
// if _, err := bv.Get(101); err == nil {
80-
// t.Errorf("Error should be thrown for out of bounds access")
81-
// }
82-
// }
83-
8465
var r = rand.New(rand.NewSource(99))
85-
var sets = r.Perm(10_000_000)
66+
var sets = r.Perm(1024 * 1024)
8667

8768
func BenchmarkSet(b *testing.B) {
88-
b.Run("bitvec/Set", func(b *testing.B) {
89-
bv := New(uint64(b.N / 64))
90-
b.ResetTimer()
91-
for n := 1; n < b.N; n++ {
92-
bv.TrySet(uint64(sets[n%len(sets)] % n))
93-
}
94-
})
95-
b.Run("abitvec/Set", func(b *testing.B) {
96-
abv := NewAtomic(uint64(b.N / 64))
97-
b.ResetTimer()
98-
for n := 1; n < b.N; n++ {
99-
abv.TrySet(uint64(sets[n%len(sets)] % n))
100-
}
101-
})
102-
b.Run("slice/Set", func(b *testing.B) {
103-
slice := make([]bool, b.N)
104-
b.ResetTimer()
105-
for n := 1; n < b.N; n++ {
106-
slice[sets[n%len(sets)]%n] = true
107-
}
108-
})
69+
for _, setSize := range setSizes {
70+
b.Run(fmt.Sprintf("bitvec/Set size %d", setSize), func(b *testing.B) {
71+
bv := New(uint64(setSize))
72+
b.ResetTimer()
73+
for i := 0; i < b.N; i++ {
74+
bv.TrySet(uint64(sets[i%len(sets)] % setSize))
75+
}
76+
})
77+
b.Run(fmt.Sprintf("abitvec/Set size %d", setSize), func(b *testing.B) {
78+
abv := NewAtomic(uint64(setSize))
79+
b.ResetTimer()
80+
for i := 0; i < b.N; i++ {
81+
abv.TrySet(uint64(sets[i%len(sets)] % setSize))
82+
}
83+
})
84+
b.Run(fmt.Sprintf("slice/Set size %d", setSize), func(b *testing.B) {
85+
slice := make([]bool, setSize)
86+
b.ResetTimer()
87+
for i := 0; i < b.N; i++ {
88+
slice[sets[i%len(sets)]%setSize] = true
89+
}
90+
})
91+
}
10992
}
11093

11194
func BenchmarkGet(b *testing.B) {
112-
b.Run("bitvec/Get", func(b *testing.B) {
113-
bv := New(uint64(b.N / 64))
114-
for n := 0; n < b.N && sets[n]%2 == 0; n++ {
115-
bv.TrySet(uint64(n))
116-
}
117-
b.ResetTimer()
118-
for n := 1; n < b.N; n++ {
119-
bv.Get(uint64(sets[n%len(sets)] % n))
120-
}
121-
})
122-
b.Run("abitvec/Get", func(b *testing.B) {
123-
abv := NewAtomic(uint64(b.N / 64))
124-
for n := 0; n < b.N && sets[n]%2 == 0; n++ {
125-
abv.TrySet(uint64(n))
126-
}
127-
b.ResetTimer()
128-
for n := 1; n < b.N; n++ {
129-
abv.Get(uint64(sets[n%len(sets)] % n))
130-
}
131-
})
132-
b.Run("slice/Get", func(b *testing.B) {
133-
slice := make([]bool, b.N)
134-
for n := 0; n < b.N && sets[n]%2 == 0; n++ {
135-
slice[n] = true
136-
}
137-
b.ResetTimer()
138-
for n := 1; n < b.N; n++ {
139-
_ = slice[sets[n%len(sets)]%n]
140-
}
141-
})
95+
for _, setSize := range setSizes {
96+
b.Run(fmt.Sprintf("bitvec/Get size %d", setSize), func(b *testing.B) {
97+
bv := New(uint64(setSize))
98+
for n := 0; n < setSize && sets[n]%2 == 0; n++ {
99+
bv.TrySet(uint64(n))
100+
}
101+
b.ResetTimer()
102+
for i := 0; i < b.N; i++ {
103+
bv.Get(uint64(sets[i%len(sets)] % setSize))
104+
}
105+
})
106+
b.Run(fmt.Sprintf("abitvec/Get size %d", setSize), func(b *testing.B) {
107+
abv := NewAtomic(uint64(setSize))
108+
for n := 0; n < setSize && sets[n]%2 == 0; n++ {
109+
abv.TrySet(uint64(n))
110+
}
111+
b.ResetTimer()
112+
for i := 0; i < b.N; i++ {
113+
abv.Get(uint64(sets[i%len(sets)] % setSize))
114+
}
115+
})
116+
b.Run(fmt.Sprintf("slice/Get size %d", setSize), func(b *testing.B) {
117+
slice := make([]bool, setSize)
118+
for n := 0; n < setSize && sets[n]%2 == 0; n++ {
119+
slice[n] = true
120+
}
121+
b.ResetTimer()
122+
for i := 0; i < b.N; i++ {
123+
_ = slice[sets[i%len(sets)]%setSize]
124+
}
125+
})
126+
}
142127
}

0 commit comments

Comments
 (0)