1// Copyright 2011 The Go Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style 3// license that can be found in the LICENSE file. 4 5package main 6 7import ( 8 "flag" 9 "os" 10 "runtime" 11 "testing" 12 13 fast "./fast" 14 slow "./slow" 15) 16 17var buf = make([]byte, 1048576) 18 19func BenchmarkFastNonASCII(b *testing.B) { 20 for i := 0; i < b.N; i++ { 21 fast.NonASCII(buf, 0) 22 } 23} 24 25func BenchmarkSlowNonASCII(b *testing.B) { 26 for i := 0; i < b.N; i++ { 27 slow.NonASCII(buf, 0) 28 } 29} 30 31func main() { 32 testing.Init() 33 os.Args = []string{os.Args[0], "-test.benchtime=100ms"} 34 flag.Parse() 35 36 rslow := testing.Benchmark(BenchmarkSlowNonASCII) 37 rfast := testing.Benchmark(BenchmarkFastNonASCII) 38 tslow := rslow.NsPerOp() 39 tfast := rfast.NsPerOp() 40 41 // Optimization should be good for at least 2x, but be forgiving. 42 // On the ARM simulator we see closer to 1.5x. 43 speedup := float64(tslow) / float64(tfast) 44 want := 1.8 45 if runtime.GOARCH == "arm" { 46 want = 1.3 47 } 48 if speedup < want { 49 // TODO(rsc): doesn't work on linux-amd64 or darwin-amd64 builders, nor on 50 // a Lenovo x200 (linux-amd64) laptop. 51 // println("fast:", tfast, "slow:", tslow, "speedup:", speedup, "want:", want) 52 // println("not fast enough") 53 // os.Exit(1) 54 } 55} 56