mirror of
https://github.com/golang/go
synced 2024-11-13 20:40:31 -07:00
fbc6a97222
Any code that imports the testing package forces the testing flags to be defined, even in non-test binaries. People work around this today by defining a copy of the testing.TB interface just to avoid importing testing. Fix this by moving flag registration into a new function, testing.Init. Delay calling Init until the testing binary begins to run, in testing.MainStart. Init is exported for cases where users need the testing flags to be defined outside of a "go test" context. In particular, this may be needed where testing.Benchmark is called outside of a test. Fixes #21051 Change-Id: Ib7e02459e693c26ae1ba71bbae7d455a91118ee3 Reviewed-on: https://go-review.googlesource.com/c/go/+/173722 Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
56 lines
1.2 KiB
Go
56 lines
1.2 KiB
Go
// Copyright 2011 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 main
|
|
|
|
import (
|
|
"flag"
|
|
"os"
|
|
"runtime"
|
|
"testing"
|
|
|
|
fast "./fast"
|
|
slow "./slow"
|
|
)
|
|
|
|
var buf = make([]byte, 1048576)
|
|
|
|
func BenchmarkFastNonASCII(b *testing.B) {
|
|
for i := 0; i < b.N; i++ {
|
|
fast.NonASCII(buf, 0)
|
|
}
|
|
}
|
|
|
|
func BenchmarkSlowNonASCII(b *testing.B) {
|
|
for i := 0; i < b.N; i++ {
|
|
slow.NonASCII(buf, 0)
|
|
}
|
|
}
|
|
|
|
func main() {
|
|
testing.Init()
|
|
os.Args = []string{os.Args[0], "-test.benchtime=100ms"}
|
|
flag.Parse()
|
|
|
|
rslow := testing.Benchmark(BenchmarkSlowNonASCII)
|
|
rfast := testing.Benchmark(BenchmarkFastNonASCII)
|
|
tslow := rslow.NsPerOp()
|
|
tfast := rfast.NsPerOp()
|
|
|
|
// Optimization should be good for at least 2x, but be forgiving.
|
|
// On the ARM simulator we see closer to 1.5x.
|
|
speedup := float64(tslow) / float64(tfast)
|
|
want := 1.8
|
|
if runtime.GOARCH == "arm" {
|
|
want = 1.3
|
|
}
|
|
if speedup < want {
|
|
// TODO(rsc): doesn't work on linux-amd64 or darwin-amd64 builders, nor on
|
|
// a Lenovo x200 (linux-amd64) laptop.
|
|
// println("fast:", tfast, "slow:", tslow, "speedup:", speedup, "want:", want)
|
|
// println("not fast enough")
|
|
// os.Exit(1)
|
|
}
|
|
}
|