Ich Benchmark-Code mit verschiedenen Listengrößen (Listen der Größe S) Go Benchmark zeigt ns/op, aber was ich will ist (ns/op)/S.Kann golang benchmark eine benutzerdefinierte Ausgabe geben?
Mit anderen Worten, ist der Ausgang der go test -bench=.
:
BenchmarkMy10-4 100000000 15.7 ns/op
BenchmarkMy20-4 50000000 33.8 ns/op
BenchmarkMy30-4 30000000 43.8 ns/op
BenchmarkMy40-4 30000000 49.3 ns/op
BenchmarkMy50-4 30000000 56.6 ns/op
BenchmarkMy1000-4 2000000 686 ns/op
BenchmarkMy10000-4 200000 6685 ns/op
BenchmarkMy100000-4 20000 65425 ns/op
Die "10" in "My10" steht für eine Liste der 10 Elemente (S = 10).
Während es nützlich ist, die ns/op für verschiedene Listengrößen zu kennen, möchte ich auch die ns/op/S (Zeit pro Element in der Liste) wissen.
Jetzt paste ich die Ergebnisse in eine Tabelle und mache die Mathematik dort. Ich hätte aber gern "go test", um diese Informationen für mich auszugeben.
Meine main_test.go Datei wie folgt aussieht:
import "testing"
var result int
func benchmarkMy(i int, b *testing.B) {
var r int
mylist := MakeList(i)
b.ResetTimer()
for n := 0; n < b.N; n++ {
r = My(mylist)
}
result = r
}
func BenchmarkMy10(b *testing.B) { benchmarkMy(10, b) }
func BenchmarkMy20(b *testing.B) { benchmarkMy(20, b) }
func BenchmarkMy30(b *testing.B) { benchmarkMy(30, b) }
func BenchmarkMy40(b *testing.B) { benchmarkMy(40, b) }
func BenchmarkMy50(b *testing.B) { benchmarkMy(50, b) }
func BenchmarkMy1000(b *testing.B) { benchmarkMy(1000, b) }
func BenchmarkMy10000(b *testing.B) { benchmarkMy(10000, b) }
func BenchmarkMy100000(b *testing.B) { benchmarkMy(100000, b) }
Es ist wie die test.BenchmarkResult Struktur scheint hat die Informationen, die ich brauche, aber ich sehe nicht, wie diese Struktur zu verwenden.
Nein, Standard Benchmark kann dies nicht einfach tun, weil es nicht allgemein nützlich ist. ns/op/S könnte für Algorithmen interessant sein, die nur O (1) sind. – Volker