diff options
Diffstat (limited to 'src/testing/loop_test.go')
| -rw-r--r-- | src/testing/loop_test.go | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/src/testing/loop_test.go b/src/testing/loop_test.go new file mode 100644 index 0000000000..ae1a5e019b --- /dev/null +++ b/src/testing/loop_test.go @@ -0,0 +1,51 @@ +// Copyright 2024 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package testing + +func TestBenchmarkBLoop(t *T) { + var initialStart highPrecisionTime + var firstStart highPrecisionTime + var lastStart highPrecisionTime + runs := 0 + iters := 0 + finalBN := 0 + bRet := Benchmark(func(b *B) { + initialStart = b.start + runs++ + for b.Loop() { + if iters == 0 { + firstStart = b.start + } + lastStart = b.start + iters++ + } + finalBN = b.N + }) + // Verify that a b.Loop benchmark is invoked just once. + if runs != 1 { + t.Errorf("want runs == 1, got %d", runs) + } + // Verify that at least one iteration ran. + if iters == 0 { + t.Fatalf("no iterations ran") + } + // Verify that b.N, bRet.N, and the b.Loop() iteration count match. + if finalBN != iters || bRet.N != iters { + t.Errorf("benchmark iterations mismatch: %d loop iterations, final b.N=%d, bRet.N=%d", iters, finalBN, bRet.N) + } + // Make sure the benchmark ran for an appropriate amount of time. + if bRet.T < benchTime.d { + t.Fatalf("benchmark ran for %s, want >= %s", bRet.T, benchTime.d) + } + // Verify that the timer is reset on the first loop, and then left alone. + if firstStart == initialStart { + t.Errorf("b.Loop did not reset the timer") + } + if lastStart != firstStart { + t.Errorf("timer was reset during iteration") + } +} + +// See also TestBenchmarkBLoop* in other files. |
