错误的基准测试函数

看一下下面的基准测试函数代码:

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)
}
最后编辑: kuteng  文档更新时间: 2021-03-27 20:14   作者:kuteng