From 92cf05daf3c96c854f8e2a32d6734a91ef7bb865 Mon Sep 17 00:00:00 2001 From: Russ Cox Date: Wed, 5 Apr 2017 09:56:39 -0400 Subject: [PATCH] test: deflake locklinear again Fixes #19276. Change-Id: I64f8f80331d09956b6698c0b004ed7f7d70857fc Reviewed-on: https://go-review.googlesource.com/39591 Run-TryBot: Russ Cox TryBot-Result: Gobot Gobot Reviewed-by: Josh Bleecher Snyder --- test/locklinear.go | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/test/locklinear.go b/test/locklinear.go index f1e912a2a3..161912b65e 100644 --- a/test/locklinear.go +++ b/test/locklinear.go @@ -38,17 +38,25 @@ func checkLinear(typ string, tries int, f func(n int)) { n := tries fails := 0 var buf bytes.Buffer + inversions := 0 for { t1 := timeF(n) t2 := timeF(2 * n) if debug { println(n, t1.String(), 2*n, t2.String()) } - fmt.Fprintf(&buf, "%d %v %d %v\n", n, t1, 2*n, t2) - // should be 2x (linear); allow up to 2.5x - if t1*3/2 < t2 && t2 < t1*5/2 { + fmt.Fprintf(&buf, "%d %v %d %v (%.1fX)\n", n, t1, 2*n, t2, float64(t2)/float64(t1)) + // should be 2x (linear); allow up to 3x + if t1*3/2 < t2 && t2 < t1*3 { return } + if t2 < t1 { + if inversions++; inversions >= 5 { + // The system must be overloaded (some builders). Give up. + return + } + continue // try again; don't increment fails + } // Once the test runs long enough for n ops, // try to get the right ratio at least once. // If many in a row all fail, give up.