netBytes uint64
// Extra metrics collected by ReportMetric.
extra map[string]float64
+ // Remaining iterations of Loop() to be executed in benchFunc.
+ loopN int
}
// StartTimer starts timing a test. This function is called automatically
runtime.GC()
b.resetRaces()
b.N = n
+ b.loopN = n
b.parallelism = 1
b.ResetTimer()
b.StartTimer()
b.extra[unit] = n
}
+// Loop returns true until b.N calls has been made to it.
+//
+// A benchmark should either use Loop or contain an explicit loop from 0 to b.N, but not both.
+// After the benchmark finishes, b.N will contain the total number of calls to op, so the benchmark
+// may use b.N to compute other average metrics.
+func (b *B) Loop() bool {
+ b.loopN--
+ return b.loopN >= 0
+}
+
// BenchmarkResult contains the results of a benchmark run.
type BenchmarkResult struct {
N int // The number of iterations.
})
}
+func TestLoopEqualsRangeOverBN(t *testing.T) {
+ // Verify that b.N and the b.Loop() iteration count match.
+ var nIterated, nInfered int
+ testing.Benchmark(func(b *testing.B) {
+ i := 0
+ for b.Loop() {
+ i++
+ }
+ nIterated = i
+ nInfered = b.N
+ })
+ if nIterated != nInfered {
+ t.Fatalf("Iteration of the two different benchmark loop flavor differs, got %d iterations want %d", nIterated, nInfered)
+ }
+}
+
func ExampleB_RunParallel() {
// Parallel benchmark for text/template.Template.Execute on a single object.
testing.Benchmark(func(b *testing.B) {