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