From 8dae5390cbc2b4d3b772b8f17182e885523b698b Mon Sep 17 00:00:00 2001 From: Keith Randall Date: Fri, 12 Jun 2020 11:07:56 -0700 Subject: [PATCH] runtime: raise alert threshold on window smhasher test This alert is triggering occasionally. I've investigated the collisions that happen, and they all seem to be pairwise, so they are not a big deal. "pairwise" = when there are 32 collisions, it is two keys mapping to the same hash, 32 times, not 33 keys all mapping to the same hash. Add some t.Logf calls in case this comes back, which will help isolate the problem. Fixes #39352 Change-Id: I1749d7c8efd0afcf9024d8964d15bc0f58a86e4f Reviewed-on: https://go-review.googlesource.com/c/go/+/237718 Run-TryBot: Keith Randall TryBot-Result: Gobot Gobot Reviewed-by: Ian Lance Taylor --- src/runtime/hash_test.go | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/runtime/hash_test.go b/src/runtime/hash_test.go index 655ca18f115..502383557b8 100644 --- a/src/runtime/hash_test.go +++ b/src/runtime/hash_test.go @@ -152,14 +152,13 @@ func (s *HashSet) addS_seed(x string, seed uintptr) { s.add(StringHash(x, seed)) } func (s *HashSet) check(t *testing.T) { - const SLOP = 10.0 + const SLOP = 50.0 collisions := s.n - len(s.m) - //fmt.Printf("%d/%d\n", len(s.m), s.n) pairs := int64(s.n) * int64(s.n-1) / 2 expected := float64(pairs) / math.Pow(2.0, float64(hashSize)) stddev := math.Sqrt(expected) if float64(collisions) > expected+SLOP*(3*stddev+1) { - t.Errorf("unexpected number of collisions: got=%d mean=%f stddev=%f", collisions, expected, stddev) + t.Errorf("unexpected number of collisions: got=%d mean=%f stddev=%f threshold=%f", collisions, expected, stddev, expected+SLOP*(3*stddev+1)) } } @@ -564,8 +563,11 @@ func avalancheTest1(t *testing.T, k Key) { // All bit rotations of a set of distinct keys func TestSmhasherWindowed(t *testing.T) { + t.Logf("32 bit keys") windowed(t, &Int32Key{}) + t.Logf("64 bit keys") windowed(t, &Int64Key{}) + t.Logf("string keys") windowed(t, &BytesKey{make([]byte, 128)}) } func windowed(t *testing.T, k Key) {