// 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) } }