]> Cypherpunks repositories - gostls13.git/commitdiff
test: make maplinear iterdelete test less flaky
authorJosh Bleecher Snyder <josharian@gmail.com>
Mon, 15 Sep 2014 17:56:37 +0000 (10:56 -0700)
committerJosh Bleecher Snyder <josharian@gmail.com>
Mon, 15 Sep 2014 17:56:37 +0000 (10:56 -0700)
iterdelete's run time varies; occasionally we get unlucky. To reduce spurious failures, average away some of the variation.

On my machine, 8 of 5000 runs (0.15%) failed before this CL. After this CL, there were no failures after 35,000 runs.

I confirmed that this adjusted test still fails before CL 141270043.

LGTM=khr
R=khr
CC=bradfitz, golang-codereviews
https://golang.org/cl/140610043

test/maplinear.go

index 8cc198b8fe443adfa42de286975e9b14ca7c6425..06da968ef0d9754b2d8c0b2b3693caf72a29259a 100644 (file)
@@ -146,15 +146,19 @@ func main() {
        // O(n lg n) time.  Fortunately, the checkLinear test
        // leaves enough wiggle room to include n lg n time
        // (it actually tests for O(n^log_2(3)).
-       checkLinear("iterdelete", 10000, func(n int) {
-               m := map[int]int{}
-               for i := 0; i < n; i++ {
-                       m[i] = i
-               }
-               for i := 0; i < n; i++ {
-                       for k := range m {
-                               delete(m, k)
-                               break
+       // To prevent false positives, average away variation
+       // by doing multiple rounds within a single run.
+       checkLinear("iterdelete", 2500, func(n int) {
+               for round := 0; round < 4; round++ {
+                       m := map[int]int{}
+                       for i := 0; i < n; i++ {
+                               m[i] = i
+                       }
+                       for i := 0; i < n; i++ {
+                               for k := range m {
+                                       delete(m, k)
+                                       break
+                               }
                        }
                }
        })