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