错误的基准测试函数

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

  1. func BenchmarkFiboI(b *testing.B) {
  2. for i := 0; i < b.N; i++ {
  3. _ = fibo1(i)
  4. }
  5. }

BenchmarkFibo() 函数有一个有效的方法名和正确的签名。然而,坏消息是这个基准测试函数是错的,并且您执行 go test 命令后不能从它获得任何输出。

原因是根据上一节的描述,随着 b.N 值的增加,由于 for循环这个基准测试函数的运行次数也会增加。这一事实阻止了 BenchmarkFiboI() 收敛于一个稳定的数字,从而妨碍了函数完成并返回。

由于算法原因,下面的基准测试函数也实现错了:

  1. func BenchmarkfiboII(b *testing.B) {
  2. for i := 0 ; i < b.N ; i++ {
  3. _ = fibo2(b.N)
  4. }
  5. }

相反,下面俩个基准测试函数的实现没有错误:

  1. func BenchmarkFiboIV(b *testing.B) {
  2. for i := 0; i < b.N; i++ {
  3. _ = fibo3(10)
  4. }
  5. }
  6. func BenchmarkFiboIII(b *testing.B) {
  7. _ = fibo3(b.N)
  8. }