summaryrefslogtreecommitdiff
path: root/src/regexp/all_test.go
diff options
context:
space:
mode:
authorIngo Oeser <nightlyone@googlemail.com>2016-10-18 18:05:43 +0200
committerBrad Fitzpatrick <bradfitz@golang.org>2016-10-19 07:09:08 +0000
commit9aed16e96dc97a68a00e6358fe05f96ce5c16b35 (patch)
tree846a9d5149b9c9fa938c060b87edb588593d5b15 /src/regexp/all_test.go
parentf36e1adaa2c72d74dc669b596ea1c4df5e938def (diff)
downloadgo-git-9aed16e96dc97a68a00e6358fe05f96ce5c16b35.tar.gz
regexp: avoid alloc in QuoteMeta when not quoting
Many users quote literals in regular expressions just in case. No need to allocate then. Note: Also added benchmarks for quoting and not quoting. name old time/op new time/op delta QuoteMetaAll-4 629ns ± 6% 654ns ± 5% +4.01% (p=0.001 n=20+19) QuoteMetaNone-4 1.02µs ± 6% 0.20µs ± 0% -80.73% (p=0.000 n=18+20) name old speed new speed delta QuoteMetaAll-4 22.3MB/s ± 6% 21.4MB/s ± 5% -3.94% (p=0.001 n=20+19) QuoteMetaNone-4 25.3MB/s ± 3% 131.5MB/s ± 0% +419.28% (p=0.000 n=17+19) name old alloc/op new alloc/op delta QuoteMetaAll-4 64.0B ± 0% 64.0B ± 0% ~ (all samples are equal) QuoteMetaNone-4 96.0B ± 0% 0.0B ±NaN% -100.00% (p=0.000 n=20+20) name old allocs/op new allocs/op delta QuoteMetaAll-4 2.00 ± 0% 2.00 ± 0% ~ (all samples are equal) QuoteMetaNone-4 2.00 ± 0% 0.00 ±NaN% -100.00% (p=0.000 n=20+20) Change-Id: I38d50f463cde463115d22534f8eb849e54d899af Reviewed-on: https://go-review.googlesource.com/31395 Reviewed-by: Russ Cox <rsc@golang.org> Reviewed-by: Austin Clements <austin@google.com> Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org>
Diffstat (limited to 'src/regexp/all_test.go')
-rw-r--r--src/regexp/all_test.go20
1 files changed, 20 insertions, 0 deletions
diff --git a/src/regexp/all_test.go b/src/regexp/all_test.go
index 31843d41f1..beb46e7099 100644
--- a/src/regexp/all_test.go
+++ b/src/regexp/all_test.go
@@ -818,3 +818,23 @@ func BenchmarkMatchParallelCopied(b *testing.B) {
}
})
}
+
+var sink string
+
+func BenchmarkQuoteMetaAll(b *testing.B) {
+ s := string(specialBytes)
+ b.SetBytes(int64(len(s)))
+ b.ResetTimer()
+ for i := 0; i < b.N; i++ {
+ sink = QuoteMeta(s)
+ }
+}
+
+func BenchmarkQuoteMetaNone(b *testing.B) {
+ s := "abcdefghijklmnopqrstuvwxyz"
+ b.SetBytes(int64(len(s)))
+ b.ResetTimer()
+ for i := 0; i < b.N; i++ {
+ sink = QuoteMeta(s)
+ }
+}