blob: 963349b1f414410b27011c3307f94c8269561513 [file] [log] [blame] [edit]
// 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 strings_test
import (
. "strings"
"testing"
)
func BenchmarkSplitSeqEmptySeparator(b *testing.B) {
for range b.N {
for range SplitSeq(benchInputHard, "") {
}
}
}
func BenchmarkSplitSeqSingleByteSeparator(b *testing.B) {
for range b.N {
for range SplitSeq(benchInputHard, "/") {
}
}
}
func BenchmarkSplitSeqMultiByteSeparator(b *testing.B) {
for range b.N {
for range SplitSeq(benchInputHard, "hello") {
}
}
}
func BenchmarkSplitAfterSeqEmptySeparator(b *testing.B) {
for range b.N {
for range SplitAfterSeq(benchInputHard, "") {
}
}
}
func BenchmarkSplitAfterSeqSingleByteSeparator(b *testing.B) {
for range b.N {
for range SplitAfterSeq(benchInputHard, "/") {
}
}
}
func BenchmarkSplitAfterSeqMultiByteSeparator(b *testing.B) {
for range b.N {
for range SplitAfterSeq(benchInputHard, "hello") {
}
}
}
func findKvBySplit(s string, k string) string {
for _, kv := range Split(s, ",") {
if HasPrefix(kv, k) {
return kv
}
}
return ""
}
func findKvBySplitSeq(s string, k string) string {
for kv := range SplitSeq(s, ",") {
if HasPrefix(kv, k) {
return kv
}
}
return ""
}
func BenchmarkSplitAndSplitSeq(b *testing.B) {
testSplitString := "k1=v1,k2=v2,k3=v3,k4=v4"
testCases := []struct {
name string
input string
}{
{
name: "Key found",
input: "k3",
},
{
name: "Key not found",
input: "k100",
},
}
for _, testCase := range testCases {
b.Run("bySplit "+testCase.name, func(b *testing.B) {
b.ResetTimer()
b.ReportAllocs()
for b.Loop() {
findKvBySplit(testSplitString, testCase.input)
}
})
b.Run("bySplitSeq "+testCase.name, func(b *testing.B) {
b.ResetTimer()
b.ReportAllocs()
for b.Loop() {
findKvBySplitSeq(testSplitString, testCase.input)
}
})
}
}