
Partially fixes #1808 Allows the following to succeed: curl "https://golang.org/test/fibo.go?m=text" > fibo.go tinygo build -o fibo fibo.go ./fibo -bench
50 строки
1,1 КиБ
Go
50 строки
1,1 КиБ
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 testbench
|
|
|
|
import (
|
|
"testing"
|
|
)
|
|
|
|
var buf = make([]byte, 13579)
|
|
|
|
func NonASCII(b []byte, i int, offset int) int {
|
|
for i = offset; i < len(b) + offset; i++ {
|
|
if b[i % len(b)] >= 0x80 {
|
|
break
|
|
}
|
|
}
|
|
return i
|
|
}
|
|
|
|
func BenchmarkFastNonASCII(b *testing.B) {
|
|
var val int
|
|
for i := 0; i < b.N; i++ {
|
|
val += NonASCII(buf, 0, 0)
|
|
}
|
|
}
|
|
|
|
func BenchmarkSlowNonASCII(b *testing.B) {
|
|
var val int
|
|
for i := 0; i < b.N; i++ {
|
|
val += NonASCII(buf, 0, 0)
|
|
val += NonASCII(buf, 0, 1)
|
|
}
|
|
}
|
|
|
|
// TestBenchmark simply uses Benchmark twice and makes sure it does not crash.
|
|
func TestBenchmark(t *testing.T) {
|
|
// FIXME: reduce runtime from the current 3 seconds.
|
|
rslow := testing.Benchmark(BenchmarkSlowNonASCII)
|
|
rfast := testing.Benchmark(BenchmarkFastNonASCII)
|
|
tslow := rslow.NsPerOp()
|
|
tfast := rfast.NsPerOp()
|
|
|
|
// Be exceedingly forgiving; do not fail even if system gets busy.
|
|
speedup := float64(tslow) / float64(tfast)
|
|
if speedup < 0.3 {
|
|
t.Errorf("Expected speedup >= 0.3, got %f", speedup)
|
|
}
|
|
}
|