aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRuss Cox <rsc@golang.org>2014-10-27 18:59:02 -0400
committerRuss Cox <rsc@golang.org>2014-10-27 18:59:02 -0400
commit0f698be54742be2d66c044b61267782272777ff8 (patch)
treebd2b470c91143d1ce5fc7879d42d60a2567ad557
parentaec37e7cb1d34896f65948e88465376ceca68e0c (diff)
downloadgo-0f698be54742be2d66c044b61267782272777ff8.tar.gz
go-0f698be54742be2d66c044b61267782272777ff8.zip
test: make maplinear more robust
The test just doubled a certain number of times and then gave up. On a mostly fast but occasionally slow machine this may never make the test run long enough to see the linear growth. Change test to keep doubling until the first round takes at least a full second, to reduce the effect of occasional scheduling or other jitter. The failure we saw had a time for the first round of around 100ms. Note that this test still passes once it sees a linear effect, even with a very small total time. The timeout here only applies to how long the execution must be to support a reported failure. LGTM=khr R=khr CC=golang-codereviews, rlh https://golang.org/cl/164070043
-rw-r--r--test/maplinear.go17
1 files changed, 12 insertions, 5 deletions
diff --git a/test/maplinear.go b/test/maplinear.go
index 06da968ef0..34d0914914 100644
--- a/test/maplinear.go
+++ b/test/maplinear.go
@@ -44,14 +44,21 @@ func checkLinear(typ string, tries int, f func(n int)) {
}
return
}
- fails++
- if fails == 6 {
+ // If n ops run in under a second and the ratio
+ // doesn't work out, make n bigger, trying to reduce
+ // the effect that a constant amount of overhead has
+ // on the computed ratio.
+ if t1 < 1*time.Second {
+ n *= 2
+ continue
+ }
+ // Once the test runs long enough for n ops,
+ // try to get the right ratio at least once.
+ // If five in a row all fail, give up.
+ if fails++; fails >= 5 {
panic(fmt.Sprintf("%s: too slow: %d inserts: %v; %d inserts: %v\n",
typ, n, t1, 2*n, t2))
}
- if fails < 4 {
- n *= 2
- }
}
}