1
0
mirror of https://github.com/golang/go synced 2024-11-17 15:14:42 -07:00

bytes: deflake TestGrow by using testing.AllocsPerRun

Fixes #36695

Change-Id: I4392246015252018b49f321a5a839cc68cc611d7
GitHub-Last-Rev: c2fb1f7ddb
GitHub-Pull-Request: golang/go#36732
Reviewed-on: https://go-review.googlesource.com/c/go/+/216237
Reviewed-by: Bryan C. Mills <bcmills@google.com>
Run-TryBot: Bryan C. Mills <bcmills@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
This commit is contained in:
HowJMay 2020-02-26 18:19:18 +00:00 committed by Bryan C. Mills
parent 025a4faf5f
commit 75619d199f

View File

@ -8,7 +8,6 @@ import (
. "bytes" . "bytes"
"io" "io"
"math/rand" "math/rand"
"runtime"
"testing" "testing"
"unicode/utf8" "unicode/utf8"
) )
@ -495,20 +494,20 @@ func TestGrow(t *testing.T) {
x := []byte{'x'} x := []byte{'x'}
y := []byte{'y'} y := []byte{'y'}
tmp := make([]byte, 72) tmp := make([]byte, 72)
for _, startLen := range []int{0, 100, 1000, 10000, 100000} { for _, growLen := range []int{0, 100, 1000, 10000, 100000} {
xBytes := Repeat(x, startLen) for _, startLen := range []int{0, 100, 1000, 10000, 100000} {
for _, growLen := range []int{0, 100, 1000, 10000, 100000} { xBytes := Repeat(x, startLen)
buf := NewBuffer(xBytes) buf := NewBuffer(xBytes)
// If we read, this affects buf.off, which is good to test. // If we read, this affects buf.off, which is good to test.
readBytes, _ := buf.Read(tmp) readBytes, _ := buf.Read(tmp)
buf.Grow(growLen)
yBytes := Repeat(y, 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. // Check no allocation occurs in write, as long as we're single-threaded.
var m1, m2 runtime.MemStats if allocs != 0 {
runtime.ReadMemStats(&m1)
buf.Write(yBytes)
runtime.ReadMemStats(&m2)
if runtime.GOMAXPROCS(-1) == 1 && m1.Mallocs != m2.Mallocs {
t.Errorf("allocation occurred during write") t.Errorf("allocation occurred during write")
} }
// Check that buffer has correct data. // Check that buffer has correct data.