From 75619d199f88bc4d411cefcf5735cbbff78d1ae2 Mon Sep 17 00:00:00 2001 From: HowJMay Date: Wed, 26 Feb 2020 18:19:18 +0000 Subject: [PATCH] bytes: deflake TestGrow by using testing.AllocsPerRun Fixes #36695 Change-Id: I4392246015252018b49f321a5a839cc68cc611d7 GitHub-Last-Rev: c2fb1f7ddbe9b80059eed69f31781abe0a1db185 GitHub-Pull-Request: golang/go#36732 Reviewed-on: https://go-review.googlesource.com/c/go/+/216237 Reviewed-by: Bryan C. Mills Run-TryBot: Bryan C. Mills TryBot-Result: Gobot Gobot --- src/bytes/buffer_test.go | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/src/bytes/buffer_test.go b/src/bytes/buffer_test.go index 7626d277d4..fec5ef8a35 100644 --- a/src/bytes/buffer_test.go +++ b/src/bytes/buffer_test.go @@ -8,7 +8,6 @@ import ( . "bytes" "io" "math/rand" - "runtime" "testing" "unicode/utf8" ) @@ -495,20 +494,20 @@ func TestGrow(t *testing.T) { x := []byte{'x'} y := []byte{'y'} tmp := make([]byte, 72) - for _, startLen := range []int{0, 100, 1000, 10000, 100000} { - xBytes := Repeat(x, startLen) - for _, growLen := range []int{0, 100, 1000, 10000, 100000} { + for _, growLen := range []int{0, 100, 1000, 10000, 100000} { + for _, startLen := range []int{0, 100, 1000, 10000, 100000} { + xBytes := Repeat(x, startLen) + buf := NewBuffer(xBytes) // If we read, this affects buf.off, which is good to test. readBytes, _ := buf.Read(tmp) - buf.Grow(growLen) yBytes := Repeat(y, growLen) + allocs := testing.AllocsPerRun(100, func() { + buf.Grow(growLen) + buf.Write(yBytes) + }) // Check no allocation occurs in write, as long as we're single-threaded. - var m1, m2 runtime.MemStats - runtime.ReadMemStats(&m1) - buf.Write(yBytes) - runtime.ReadMemStats(&m2) - if runtime.GOMAXPROCS(-1) == 1 && m1.Mallocs != m2.Mallocs { + if allocs != 0 { t.Errorf("allocation occurred during write") } // Check that buffer has correct data. -- 2.50.0