...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package bitutils_test
18
19 import (
20 "testing"
21
22 "github.com/apache/arrow/go/v15/internal/bitutils"
23 "golang.org/x/exp/rand"
24 )
25
26 const kBufferSize int64 = 1024 * 8
27
28 var pattern = []bool{false, false, false, true, true, true}
29
30 func runBench(b *testing.B, bitmap []byte, nbits int64, fn func([]byte, int64, int64, func() bool)) {
31 for n := 0; n < b.N; n++ {
32 patternIndex := 0
33 gen := func() bool {
34 b := pattern[patternIndex]
35 patternIndex++
36 if patternIndex == len(pattern) {
37 patternIndex = 0
38 }
39 return b
40 }
41
42 fn(bitmap, 0, nbits, gen)
43 }
44 }
45
46 func BenchmarkGenerateBits(b *testing.B) {
47 nbits := kBufferSize * 8
48
49 r := rand.New(rand.NewSource(0))
50 bitmap := make([]byte, kBufferSize)
51 r.Read(bitmap)
52
53 b.ResetTimer()
54 b.SetBytes(kBufferSize)
55 runBench(b, bitmap, nbits, bitutils.GenerateBits)
56 }
57
58 func BenchmarkGenerateBitsUnrolled(b *testing.B) {
59 nbits := kBufferSize * 8
60
61 r := rand.New(rand.NewSource(0))
62 bitmap := make([]byte, kBufferSize)
63 r.Read(bitmap)
64
65 b.ResetTimer()
66 b.SetBytes(kBufferSize)
67 runBench(b, bitmap, nbits, bitutils.GenerateBitsUnrolled)
68 }
69
View as plain text