@@ -1112,63 +1112,83 @@ func (w onlyWriter) Write(b []byte) (int, error) {
1112
1112
1113
1113
func BenchmarkReaderCopyOptimal (b * testing.B ) {
1114
1114
// Optimal case is where the underlying reader implements io.WriterTo
1115
+ srcBuf := bytes .NewBuffer (make ([]byte , 8192 ))
1116
+ src := NewReader (srcBuf )
1117
+ dstBuf := new (bytes.Buffer )
1118
+ dst := onlyWriter {dstBuf }
1115
1119
for i := 0 ; i < b .N ; i ++ {
1116
- b .StopTimer ()
1117
- src := NewReader (bytes .NewBuffer (make ([]byte , 8192 )))
1118
- dst := onlyWriter {new (bytes.Buffer )}
1119
- b .StartTimer ()
1120
+ srcBuf .Reset ()
1121
+ src .Reset (srcBuf )
1122
+ dstBuf .Reset ()
1120
1123
io .Copy (dst , src )
1121
1124
}
1122
1125
}
1123
1126
1124
1127
func BenchmarkReaderCopyUnoptimal (b * testing.B ) {
1125
1128
// Unoptimal case is where the underlying reader doesn't implement io.WriterTo
1129
+ srcBuf := bytes .NewBuffer (make ([]byte , 8192 ))
1130
+ src := NewReader (onlyReader {srcBuf })
1131
+ dstBuf := new (bytes.Buffer )
1132
+ dst := onlyWriter {dstBuf }
1126
1133
for i := 0 ; i < b .N ; i ++ {
1127
- b .StopTimer ()
1128
- src := NewReader (onlyReader {bytes .NewBuffer (make ([]byte , 8192 ))})
1129
- dst := onlyWriter {new (bytes.Buffer )}
1130
- b .StartTimer ()
1134
+ srcBuf .Reset ()
1135
+ src .Reset (onlyReader {srcBuf })
1136
+ dstBuf .Reset ()
1131
1137
io .Copy (dst , src )
1132
1138
}
1133
1139
}
1134
1140
1135
1141
func BenchmarkReaderCopyNoWriteTo (b * testing.B ) {
1142
+ srcBuf := bytes .NewBuffer (make ([]byte , 8192 ))
1143
+ srcReader := NewReader (srcBuf )
1144
+ src := onlyReader {srcReader }
1145
+ dstBuf := new (bytes.Buffer )
1146
+ dst := onlyWriter {dstBuf }
1136
1147
for i := 0 ; i < b .N ; i ++ {
1137
- b .StopTimer ()
1138
- src := onlyReader {NewReader (bytes .NewBuffer (make ([]byte , 8192 )))}
1139
- dst := onlyWriter {new (bytes.Buffer )}
1140
- b .StartTimer ()
1148
+ srcBuf .Reset ()
1149
+ srcReader .Reset (srcBuf )
1150
+ dstBuf .Reset ()
1141
1151
io .Copy (dst , src )
1142
1152
}
1143
1153
}
1144
1154
1145
1155
func BenchmarkWriterCopyOptimal (b * testing.B ) {
1146
1156
// Optimal case is where the underlying writer implements io.ReaderFrom
1157
+ srcBuf := bytes .NewBuffer (make ([]byte , 8192 ))
1158
+ src := onlyReader {srcBuf }
1159
+ dstBuf := new (bytes.Buffer )
1160
+ dst := NewWriter (dstBuf )
1147
1161
for i := 0 ; i < b .N ; i ++ {
1148
- b .StopTimer ()
1149
- src := onlyReader {bytes .NewBuffer (make ([]byte , 8192 ))}
1150
- dst := NewWriter (new (bytes.Buffer ))
1151
- b .StartTimer ()
1162
+ srcBuf .Reset ()
1163
+ dstBuf .Reset ()
1164
+ dst .Reset (dstBuf )
1152
1165
io .Copy (dst , src )
1153
1166
}
1154
1167
}
1155
1168
1156
1169
func BenchmarkWriterCopyUnoptimal (b * testing.B ) {
1170
+ srcBuf := bytes .NewBuffer (make ([]byte , 8192 ))
1171
+ src := onlyReader {srcBuf }
1172
+ dstBuf := new (bytes.Buffer )
1173
+ dst := NewWriter (onlyWriter {dstBuf })
1157
1174
for i := 0 ; i < b .N ; i ++ {
1158
- b .StopTimer ()
1159
- src := onlyReader {bytes .NewBuffer (make ([]byte , 8192 ))}
1160
- dst := NewWriter (onlyWriter {new (bytes.Buffer )})
1161
- b .StartTimer ()
1175
+ srcBuf .Reset ()
1176
+ dstBuf .Reset ()
1177
+ dst .Reset (onlyWriter {dstBuf })
1162
1178
io .Copy (dst , src )
1163
1179
}
1164
1180
}
1165
1181
1166
1182
func BenchmarkWriterCopyNoReadFrom (b * testing.B ) {
1183
+ srcBuf := bytes .NewBuffer (make ([]byte , 8192 ))
1184
+ src := onlyReader {srcBuf }
1185
+ dstBuf := new (bytes.Buffer )
1186
+ dstWriter := NewWriter (dstBuf )
1187
+ dst := onlyWriter {dstWriter }
1167
1188
for i := 0 ; i < b .N ; i ++ {
1168
- b .StopTimer ()
1169
- src := onlyReader {bytes .NewBuffer (make ([]byte , 8192 ))}
1170
- dst := onlyWriter {NewWriter (new (bytes.Buffer ))}
1171
- b .StartTimer ()
1189
+ srcBuf .Reset ()
1190
+ dstBuf .Reset ()
1191
+ dstWriter .Reset (dstBuf )
1172
1192
io .Copy (dst , src )
1173
1193
}
1174
1194
}
0 commit comments