. "bytes"
"io"
"math/rand"
- "runtime"
"testing"
"unicode/utf8"
)
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.