From: John Potocny Date: Thu, 26 Mar 2015 01:08:04 +0000 (-0400) Subject: strings: Add benchmark test for trim function X-Git-Tag: go1.5beta1~1375 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=6262192cd0fb98d6bb80752de70ae33fc10dc33e;p=gostls13.git strings: Add benchmark test for trim function The strings.Trim function and variants allocate memory on the heap when creating a function to pass into TrimFunc. Add a benchmark to document the behavior; an issue will be submitted to address this behavior in the compiler if possible. Change-Id: I8b66721f077951f7e7b8cf3cf346fac27a9b68c0 Reviewed-on: https://go-review.googlesource.com/8200 Reviewed-by: Ian Lance Taylor --- diff --git a/src/strings/strings_test.go b/src/strings/strings_test.go index 7bb81ef3ca..ee0c260753 100644 --- a/src/strings/strings_test.go +++ b/src/strings/strings_test.go @@ -569,6 +569,35 @@ func TestTrim(t *testing.T) { } } +func BenchmarkTrim(b *testing.B) { + b.ReportAllocs() + + for i := 0; i < b.N; i++ { + for _, tc := range trimTests { + name := tc.f + var f func(string, string) string + switch name { + case "Trim": + f = Trim + case "TrimLeft": + f = TrimLeft + case "TrimRight": + f = TrimRight + case "TrimPrefix": + f = TrimPrefix + case "TrimSuffix": + f = TrimSuffix + default: + b.Errorf("Undefined trim function %s", name) + } + actual := f(tc.in, tc.arg) + if actual != tc.out { + b.Errorf("%s(%q, %q) = %q; want %q", name, tc.in, tc.arg, actual, tc.out) + } + } + } +} + type predicate struct { f func(rune) bool name string