golang/src/unique/handle_bench_test.go

64 lines
1.1 KiB
Go

// Copyright 2024 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package unique
import (
"fmt"
"runtime"
"testing"
)
func BenchmarkMake(b *testing.B) {
benchmarkMake(b, []string{"foo"})
}
func BenchmarkMakeMany(b *testing.B) {
benchmarkMake(b, testData[:])
}
func BenchmarkMakeManyMany(b *testing.B) {
benchmarkMake(b, testDataLarge[:])
}
func benchmarkMake(b *testing.B, testData []string) {
handles := make([]Handle[string], 0, len(testData))
for i := range testData {
handles = append(handles, Make(testData[i]))
}
b.ReportAllocs()
b.ResetTimer()
b.RunParallel(func(pb *testing.PB) {
i := 0
for pb.Next() {
_ = Make(testData[i])
i++
if i >= len(testData) {
i = 0
}
}
})
b.StopTimer()
runtime.GC()
runtime.GC()
}
var (
testData [128]string
testDataLarge [128 << 10]string
)
func init() {
for i := range testData {
testData[i] = fmt.Sprintf("%b", i)
}
for i := range testDataLarge {
testDataLarge[i] = fmt.Sprintf("%b", i)
}
}