mirror of
https://github.com/moby/moby.git
synced 2022-11-09 12:21:53 -05:00
9a25b1d942
Creates a `fixedBuffer` type that is used to encapsulate functionality for reading/writing from the underlying byte slices. Uses lazily-loaded set of sync.Pools for storing buffers that are no longer needed so they can be re-used. ``` benchmark old ns/op new ns/op delta BenchmarkBytesPipeWrite-8 138469 48985 -64.62% BenchmarkBytesPipeRead-8 130922 56601 -56.77% benchmark old allocs new allocs delta BenchmarkBytesPipeWrite-8 18 8 -55.56% BenchmarkBytesPipeRead-8 0 0 +0.00% benchmark old bytes new bytes delta BenchmarkBytesPipeWrite-8 66903 1649 -97.54% BenchmarkBytesPipeRead-8 0 1 +Inf% ``` Signed-off-by: Brian Goff <cpuguy83@gmail.com>
75 lines
1.3 KiB
Go
75 lines
1.3 KiB
Go
package ioutils
|
|
|
|
import (
|
|
"bytes"
|
|
"testing"
|
|
)
|
|
|
|
func TestFixedBufferWrite(t *testing.T) {
|
|
buf := &fixedBuffer{buf: make([]byte, 0, 64)}
|
|
n, err := buf.Write([]byte("hello"))
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
if n != 5 {
|
|
t.Fatalf("expected 5 bytes written, got %d", n)
|
|
}
|
|
|
|
if string(buf.buf[:5]) != "hello" {
|
|
t.Fatalf("expected \"hello\", got %q", string(buf.buf[:5]))
|
|
}
|
|
|
|
n, err = buf.Write(bytes.Repeat([]byte{1}, 64))
|
|
if err != errBufferFull {
|
|
t.Fatalf("expected errBufferFull, got %v - %v", err, buf.buf[:64])
|
|
}
|
|
}
|
|
|
|
func TestFixedBufferRead(t *testing.T) {
|
|
buf := &fixedBuffer{buf: make([]byte, 0, 64)}
|
|
if _, err := buf.Write([]byte("hello world")); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
b := make([]byte, 5)
|
|
n, err := buf.Read(b)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
if n != 5 {
|
|
t.Fatalf("expected 5 bytes read, got %d - %s", n, buf.String())
|
|
}
|
|
|
|
if string(b) != "hello" {
|
|
t.Fatalf("expected \"hello\", got %q", string(b))
|
|
}
|
|
|
|
n, err = buf.Read(b)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
if n != 5 {
|
|
t.Fatalf("expected 5 bytes read, got %d", n)
|
|
}
|
|
|
|
if string(b) != " worl" {
|
|
t.Fatalf("expected \" worl\", got %s", string(b))
|
|
}
|
|
|
|
b = b[:1]
|
|
n, err = buf.Read(b)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
if n != 1 {
|
|
t.Fatalf("expected 1 byte read, got %d - %s", n, buf.String())
|
|
}
|
|
|
|
if string(b) != "d" {
|
|
t.Fatalf("expected \"d\", got %s", string(b))
|
|
}
|
|
}
|