]> Cypherpunks.ru repositories - gostls13.git/commitdiff
regexp: fix BenchmarkMatch_onepass_regex
authorRuss Cox <rsc@golang.org>
Tue, 2 Oct 2018 13:09:10 +0000 (09:09 -0400)
committerRuss Cox <rsc@golang.org>
Thu, 11 Oct 2018 18:01:17 +0000 (18:01 +0000)
This benchmark - in contrast to all other benchmarks - was
running the regexp match on 1-byte substrings of the input
instead of the entire input. Worse, it was doing so by preallocating
a slice of slices of every 1-byte substring. Needless to say,
this does not accurately reflect what happens when the regexp
matcher is given a large input.

Change-Id: Icd5b95f0e43f554a6b93164916745941366e03d6
Reviewed-on: https://go-review.googlesource.com/c/139778
Run-TryBot: Russ Cox <rsc@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>

src/regexp/exec_test.go

index 5f8e747b17bc1f447722fee9c609003541d4e489..02258e6e7421e274a17acf9ac1df54194a5eabff 100644 (file)
@@ -692,18 +692,12 @@ func BenchmarkMatch_onepass_regex(b *testing.B) {
                        continue
                }
                t := makeText(size.n)
-               bs := make([][]byte, len(t))
-               for i, s := range t {
-                       bs[i] = []byte{s}
-               }
                b.Run(size.name, func(b *testing.B) {
                        b.SetBytes(int64(size.n))
                        b.ReportAllocs()
                        for i := 0; i < b.N; i++ {
-                               for _, byts := range bs {
-                                       if !r.Match(byts) {
-                                               b.Fatal("not match!")
-                                       }
+                               if !r.Match(t) {
+                                       b.Fatal("not match!")
                                }
                        }
                })