Go 1.12来ましたね。
色々変更点はあるんですが、個人的にベンチマークの実行回数が指定出来るようになったのがオッとなり触ってみました。
実行コード
簡単なコードで試してみます。
package main func Calc(x, y int) int { return x + y }
package main import ( "testing" ) func BenchmarkCalc(b *testing.B) { for i := 0; i < b.N; i++ { Calc(b.N, b.N) } }
足し算するやつです。
試す
まずは今までやっていた実行秒数指定から。
$ go test -bench . -benchtime=5s goos: darwin goarch: amd64 pkg: hoge BenchmarkCalc-8 10000000000 0.35 ns/op PASS ok hoge 3.516s
5秒間回せました。
次に5回実行するようにやってみましょう。
$ go test -bench . -benchtime=5x goos: darwin goarch: amd64 pkg: hoge BenchmarkCalc-8 5 53.0 ns/op PASS ok hoge 0.006s
おー!5回実行できてますね!!
ただ、あまりにも少ない実行回数だと1回あたりの実行時間が大きくなってしまうみたいですね・・・
ちなみに10000000000回だと
$ go test -bench . -benchtime=10000000000x goos: darwin goarch: amd64 pkg: hoge BenchmarkCalc-8 10000000000 0.35 ns/op PASS ok hoge 3.541s
先程の実行時間指定でベンチマークしてみた値と同じになりました。
まとめ
これが実装された経緯が
これだと思うのですが、Russ Cox氏の反論とか見てると面白いですね。
正直、僕も実行回数指定出来てもあんま意味ないんじゃないかと思っとります。
取り急ぎ、現場からは以上です。