1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68
|
// Licensed to the Apache Software Foundation (ASF) under one
// or more contributor license agreements. See the NOTICE file
// distributed with this work for additional information
// regarding copyright ownership. The ASF licenses this file
// to you under the Apache License, Version 2.0 (the
// "License"); you may not use this file except in compliance
// with the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package bitutils_test
import (
"testing"
"github.com/apache/arrow-go/v18/internal/bitutils"
"golang.org/x/exp/rand"
)
const kBufferSize int64 = 1024 * 8
var pattern = []bool{false, false, false, true, true, true}
func runBench(b *testing.B, bitmap []byte, nbits int64, fn func([]byte, int64, int64, func() bool)) {
for n := 0; n < b.N; n++ {
patternIndex := 0
gen := func() bool {
b := pattern[patternIndex]
patternIndex++
if patternIndex == len(pattern) {
patternIndex = 0
}
return b
}
fn(bitmap, 0, nbits, gen)
}
}
func BenchmarkGenerateBits(b *testing.B) {
nbits := kBufferSize * 8
// random bytes
r := rand.New(rand.NewSource(0))
bitmap := make([]byte, kBufferSize)
r.Read(bitmap)
b.ResetTimer()
b.SetBytes(kBufferSize)
runBench(b, bitmap, nbits, bitutils.GenerateBits)
}
func BenchmarkGenerateBitsUnrolled(b *testing.B) {
nbits := kBufferSize * 8
// random bytes
r := rand.New(rand.NewSource(0))
bitmap := make([]byte, kBufferSize)
r.Read(bitmap)
b.ResetTimer()
b.SetBytes(kBufferSize)
runBench(b, bitmap, nbits, bitutils.GenerateBitsUnrolled)
}
|