func TestReaderWriteTo(t *testing.T) {
input := createTestInput(8192)
- r := NewReader(&onlyReader{bytes.NewBuffer(input)})
+ r := NewReader(onlyReader{bytes.NewBuffer(input)})
w := new(bytes.Buffer)
if n, err := r.WriteTo(w); err != nil || n != int64(len(input)) {
t.Fatalf("r.WriteTo(w) = %d, %v, want %d, nil", n, err, len(input))
func TestWriterReadFrom(t *testing.T) {
ws := []func(io.Writer) io.Writer{
- func(w io.Writer) io.Writer { return &onlyWriter{w} },
+ func(w io.Writer) io.Writer { return onlyWriter{w} },
func(w io.Writer) io.Writer { return w },
}
if w0 != 0 {
t.Fatalf("write 1200 'x's: got %d writes, want 0", w0)
}
- io.Copy(b0, &onlyReader{strings.NewReader(strings.Repeat("x", 30))})
+ io.Copy(b0, onlyReader{strings.NewReader(strings.Repeat("x", 30))})
if w0 != 0 {
t.Fatalf("write 1230 'x's: got %d writes, want 0", w0)
}
- io.Copy(b0, &onlyReader{strings.NewReader(strings.Repeat("x", 9))})
+ io.Copy(b0, onlyReader{strings.NewReader(strings.Repeat("x", 9))})
if w0 != 1 {
t.Fatalf("write 1239 'x's: got %d writes, want 1", w0)
}
if w1 != 1 {
t.Fatalf("write 1200 + 89 'x's: got %d writes, want 1", w1)
}
- io.Copy(b1, &onlyReader{strings.NewReader(strings.Repeat("x", 700))})
+ io.Copy(b1, onlyReader{strings.NewReader(strings.Repeat("x", 700))})
if w1 != 1 {
t.Fatalf("write 1200 + 789 'x's: got %d writes, want 1", w1)
}
- io.Copy(b1, &onlyReader{strings.NewReader(strings.Repeat("x", 600))})
+ io.Copy(b1, onlyReader{strings.NewReader(strings.Repeat("x", 600))})
if w1 != 2 {
t.Fatalf("write 1200 + 1389 'x's: got %d writes, want 2", w1)
}
r io.Reader
}
-func (r *onlyReader) Read(b []byte) (int, error) {
+func (r onlyReader) Read(b []byte) (int, error) {
return r.r.Read(b)
}
w io.Writer
}
-func (w *onlyWriter) Write(b []byte) (int, error) {
+func (w onlyWriter) Write(b []byte) (int, error) {
return w.w.Write(b)
}
for i := 0; i < b.N; i++ {
b.StopTimer()
src := NewReader(bytes.NewBuffer(make([]byte, 8192)))
- dst := &onlyWriter{new(bytes.Buffer)}
+ dst := onlyWriter{new(bytes.Buffer)}
b.StartTimer()
io.Copy(dst, src)
}
// Unoptimal case is where the underlying reader doesn't implement io.WriterTo
for i := 0; i < b.N; i++ {
b.StopTimer()
- src := NewReader(&onlyReader{bytes.NewBuffer(make([]byte, 8192))})
- dst := &onlyWriter{new(bytes.Buffer)}
+ src := NewReader(onlyReader{bytes.NewBuffer(make([]byte, 8192))})
+ dst := onlyWriter{new(bytes.Buffer)}
b.StartTimer()
io.Copy(dst, src)
}
func BenchmarkReaderCopyNoWriteTo(b *testing.B) {
for i := 0; i < b.N; i++ {
b.StopTimer()
- src := &onlyReader{NewReader(bytes.NewBuffer(make([]byte, 8192)))}
- dst := &onlyWriter{new(bytes.Buffer)}
+ src := onlyReader{NewReader(bytes.NewBuffer(make([]byte, 8192)))}
+ dst := onlyWriter{new(bytes.Buffer)}
b.StartTimer()
io.Copy(dst, src)
}
// Optimal case is where the underlying writer implements io.ReaderFrom
for i := 0; i < b.N; i++ {
b.StopTimer()
- src := &onlyReader{bytes.NewBuffer(make([]byte, 8192))}
+ src := onlyReader{bytes.NewBuffer(make([]byte, 8192))}
dst := NewWriter(new(bytes.Buffer))
b.StartTimer()
io.Copy(dst, src)
func BenchmarkWriterCopyUnoptimal(b *testing.B) {
for i := 0; i < b.N; i++ {
b.StopTimer()
- src := &onlyReader{bytes.NewBuffer(make([]byte, 8192))}
- dst := NewWriter(&onlyWriter{new(bytes.Buffer)})
+ src := onlyReader{bytes.NewBuffer(make([]byte, 8192))}
+ dst := NewWriter(onlyWriter{new(bytes.Buffer)})
b.StartTimer()
io.Copy(dst, src)
}
func BenchmarkWriterCopyNoReadFrom(b *testing.B) {
for i := 0; i < b.N; i++ {
b.StopTimer()
- src := &onlyReader{bytes.NewBuffer(make([]byte, 8192))}
- dst := &onlyWriter{NewWriter(new(bytes.Buffer))}
+ src := onlyReader{bytes.NewBuffer(make([]byte, 8192))}
+ dst := onlyWriter{NewWriter(new(bytes.Buffer))}
b.StartTimer()
io.Copy(dst, src)
}