]> Cypherpunks repositories - gostls13.git/commitdiff
strings: Add benchmark test for trim function
authorJohn Potocny <johnp@vividcortex.com>
Thu, 26 Mar 2015 01:08:04 +0000 (21:08 -0400)
committerIan Lance Taylor <iant@golang.org>
Tue, 31 Mar 2015 00:40:55 +0000 (00:40 +0000)
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 <iant@golang.org>
src/strings/strings_test.go

index 7bb81ef3ca14ff40bd96b7c030ee79f1619de878..ee0c260753198fe99dfee6a30e8e76551afdeee3 100644 (file)
@@ -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