错误的基准测试函数
看一下下面的基准测试函数代码:
func BenchmarkFiboI(b *testing.B) {
for i := 0; i < b.N; i++ {
_ = fibo1(i)
}
}
BenchmarkFibo()
函数有一个有效的方法名和正确的签名。然而,坏消息是这个基准测试函数是错的,并且您执行 go test
命令后不能从它获得任何输出。
原因是根据上一节的描述,随着 b.N
值的增加,由于 for
循环这个基准测试函数的运行次数也会增加。这一事实阻止了 BenchmarkFiboI()
收敛于一个稳定的数字,从而妨碍了函数完成并返回。
由于算法原因,下面的基准测试函数也实现错了:
func BenchmarkfiboII(b *testing.B) {
for i := 0 ; i < b.N ; i++ {
_ = fibo2(b.N)
}
}
相反,下面俩个基准测试函数的实现没有错误:
func BenchmarkFiboIV(b *testing.B) {
for i := 0; i < b.N; i++ {
_ = fibo3(10)
}
}
func BenchmarkFiboIII(b *testing.B) {
_ = fibo3(b.N)
}