aboutsummaryrefslogtreecommitdiff
path: root/src/testing
diff options
context:
space:
mode:
authorMichael Pratt <mpratt@google.com>2021-10-18 18:34:24 -0400
committerMichael Pratt <mpratt@google.com>2021-10-25 15:43:33 +0000
commit2c66cab8a7b569b2dc5a7ab112ba4579f39c5dbb (patch)
treed5b52f82bbb8e53fae720256b57b96c700b2ef28 /src/testing
parent89cc528e430c18c6c36b8e8bbfb1bab26ed110e3 (diff)
downloadgo-2c66cab8a7b569b2dc5a7ab112ba4579f39c5dbb.tar.gz
go-2c66cab8a7b569b2dc5a7ab112ba4579f39c5dbb.zip
testing: skip extra -count iterations if there are no tests
When running benchmarks with high -count and no tests (either at all or filtered with -run), the time for runTests to check for tests -count times can add a significant delay to starting benchmarks. To avoid this delay, make runTests bail out on the second iteration if the first found no tests to run. We expect the same tests to run every time, so there is no reason to duplicate work. One caveat: the testing docs do not explicitly require the same subtests to be run on every call, so this could break tests that depend on multiple runs to actually run all tests. I consider such tests invalid, but some may exist. Fixes #49050 Change-Id: I7b34f3832b31493cc089ee0555e231f4dc690154 Reviewed-on: https://go-review.googlesource.com/c/go/+/356669 Trust: Michael Pratt <mpratt@google.com> Run-TryBot: Michael Pratt <mpratt@google.com> TryBot-Result: Go Bot <gobot@golang.org> Reviewed-by: Ian Lance Taylor <iant@golang.org>
Diffstat (limited to 'src/testing')
-rw-r--r--src/testing/testing.go6
1 files changed, 6 insertions, 0 deletions
diff --git a/src/testing/testing.go b/src/testing/testing.go
index 6fb1a71d43..2ad2266e2d 100644
--- a/src/testing/testing.go
+++ b/src/testing/testing.go
@@ -1785,6 +1785,12 @@ func runTests(matchString func(pat, str string) (bool, error), tests []InternalT
if shouldFailFast() {
break
}
+ if i > 0 && !ran {
+ // There were no tests to run on the first
+ // iteration. This won't change, so no reason
+ // to keep trying.
+ break
+ }
ctx := newTestContext(*parallel, newMatcher(matchString, *match, "-test.run"))
ctx.deadline = deadline
t := &T{