mirror of
https://github.com/golang/go
synced 2024-11-22 08:54:39 -07:00
go/test/bench/go1: add regexp test
R=golang-dev, bradfitz CC=golang-dev https://golang.org/cl/7480047
This commit is contained in:
parent
ba6ea4a95c
commit
d526e5e79c
59
test/bench/go1/regexp_test.go
Normal file
59
test/bench/go1/regexp_test.go
Normal file
@ -0,0 +1,59 @@
|
||||
// Copyright 2013 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 go1
|
||||
|
||||
import (
|
||||
"math/rand"
|
||||
"regexp"
|
||||
"testing"
|
||||
)
|
||||
|
||||
// benchmark based on regexp/exec_test.go
|
||||
|
||||
var regexpText []byte
|
||||
|
||||
func makeRegexpText(n int) []byte {
|
||||
rand.Seed(0) // For reproducibility.
|
||||
if len(regexpText) >= n {
|
||||
return regexpText[:n]
|
||||
}
|
||||
regexpText = make([]byte, n)
|
||||
for i := range regexpText {
|
||||
if rand.Intn(30) == 0 {
|
||||
regexpText[i] = '\n'
|
||||
} else {
|
||||
regexpText[i] = byte(rand.Intn(0x7E+1-0x20) + 0x20)
|
||||
}
|
||||
}
|
||||
return regexpText
|
||||
}
|
||||
|
||||
func benchmark(b *testing.B, re string, n int) {
|
||||
r := regexp.MustCompile(re)
|
||||
t := makeRegexpText(n)
|
||||
b.ResetTimer()
|
||||
b.SetBytes(int64(n))
|
||||
for i := 0; i < b.N; i++ {
|
||||
if r.Match(t) {
|
||||
b.Fatal("match!")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const (
|
||||
easy0 = "ABCDEFGHIJKLMNOPQRSTUVWXYZ$"
|
||||
easy1 = "A[AB]B[BC]C[CD]D[DE]E[EF]F[FG]G[GH]H[HI]I[IJ]J$"
|
||||
medium = "[XYZ]ABCDEFGHIJKLMNOPQRSTUVWXYZ$"
|
||||
hard = "[ -~]*ABCDEFGHIJKLMNOPQRSTUVWXYZ$"
|
||||
)
|
||||
|
||||
func BenchmarkRegexpMatchEasy0_32(b *testing.B) { benchmark(b, easy0, 32<<0) }
|
||||
func BenchmarkRegexpMatchEasy0_1K(b *testing.B) { benchmark(b, easy0, 1<<10) }
|
||||
func BenchmarkRegexpMatchEasy1_32(b *testing.B) { benchmark(b, easy1, 32<<0) }
|
||||
func BenchmarkRegexpMatchEasy1_1K(b *testing.B) { benchmark(b, easy1, 1<<10) }
|
||||
func BenchmarkRegexpMatchMedium_32(b *testing.B) { benchmark(b, medium, 1<<0) }
|
||||
func BenchmarkRegexpMatchMedium_1K(b *testing.B) { benchmark(b, medium, 1<<10) }
|
||||
func BenchmarkRegexpMatchHard_32(b *testing.B) { benchmark(b, hard, 32<<0) }
|
||||
func BenchmarkRegexpMatchHard_1K(b *testing.B) { benchmark(b, hard, 1<<10) }
|
Loading…
Reference in New Issue
Block a user