1 | 1 |
|
2 | 2 |
import (
|
3 | 3 |
"fmt"
|
|
4 |
"strconv"
|
4 | 5 |
"testing"
|
5 | 6 |
)
|
6 | 7 |
|
|
112 | 113 |
}
|
113 | 114 |
}
|
114 | 115 |
|
115 | |
//---
|
116 | |
|
117 | |
func bench32(b *testing.B, length int) {
|
118 | |
buf := make([]byte, length)
|
119 | |
b.SetBytes(int64(length))
|
120 | |
b.ResetTimer()
|
121 | |
for i := 0; i < b.N; i++ {
|
122 | |
Sum32(buf)
|
|
116 |
func Benchmark32(b *testing.B) {
|
|
117 |
buf := make([]byte, 8192)
|
|
118 |
for length := 1; length <= cap(buf); length *= 2 {
|
|
119 |
b.Run(strconv.Itoa(length), func(b *testing.B) {
|
|
120 |
buf = buf[:length]
|
|
121 |
b.SetBytes(int64(length))
|
|
122 |
b.ReportAllocs()
|
|
123 |
b.ResetTimer()
|
|
124 |
for i := 0; i < b.N; i++ {
|
|
125 |
Sum32(buf)
|
|
126 |
}
|
|
127 |
})
|
123 | 128 |
}
|
124 | 129 |
}
|
125 | 130 |
|
126 | |
func Benchmark32_1(b *testing.B) {
|
127 | |
bench32(b, 1)
|
128 | |
}
|
129 | |
func Benchmark32_2(b *testing.B) {
|
130 | |
bench32(b, 2)
|
131 | |
}
|
132 | |
func Benchmark32_4(b *testing.B) {
|
133 | |
bench32(b, 4)
|
134 | |
}
|
135 | |
func Benchmark32_8(b *testing.B) {
|
136 | |
bench32(b, 8)
|
137 | |
}
|
138 | |
func Benchmark32_16(b *testing.B) {
|
139 | |
bench32(b, 16)
|
140 | |
}
|
141 | |
func Benchmark32_32(b *testing.B) {
|
142 | |
bench32(b, 32)
|
143 | |
}
|
144 | |
func Benchmark32_64(b *testing.B) {
|
145 | |
bench32(b, 64)
|
146 | |
}
|
147 | |
func Benchmark32_128(b *testing.B) {
|
148 | |
bench32(b, 128)
|
149 | |
}
|
150 | |
func Benchmark32_256(b *testing.B) {
|
151 | |
bench32(b, 256)
|
152 | |
}
|
153 | |
func Benchmark32_512(b *testing.B) {
|
154 | |
bench32(b, 512)
|
155 | |
}
|
156 | |
func Benchmark32_1024(b *testing.B) {
|
157 | |
bench32(b, 1024)
|
158 | |
}
|
159 | |
func Benchmark32_2048(b *testing.B) {
|
160 | |
bench32(b, 2048)
|
161 | |
}
|
162 | |
func Benchmark32_4096(b *testing.B) {
|
163 | |
bench32(b, 4096)
|
164 | |
}
|
165 | |
func Benchmark32_8192(b *testing.B) {
|
166 | |
bench32(b, 8192)
|
167 | |
}
|
|
131 |
func BenchmarkPartial32(b *testing.B) {
|
|
132 |
buf := make([]byte, 128)
|
|
133 |
for length := 8; length <= cap(buf); length *= 2 {
|
|
134 |
b.Run(strconv.Itoa(length), func(b *testing.B) {
|
|
135 |
buf = buf[:length]
|
|
136 |
b.SetBytes(int64(length))
|
|
137 |
b.ReportAllocs()
|
168 | 138 |
|
169 | |
//---
|
|
139 |
start := (32 / 8) / 2
|
|
140 |
chunks := 7
|
|
141 |
k := length / chunks
|
|
142 |
tail := (length - start) % k
|
170 | 143 |
|
171 | |
func benchPartial32(b *testing.B, length int) {
|
172 | |
buf := make([]byte, length)
|
173 | |
b.SetBytes(int64(length))
|
|
144 |
b.ResetTimer()
|
|
145 |
for i := 0; i < b.N; i++ {
|
|
146 |
hasher := New32()
|
|
147 |
hasher.Write(buf[0:start])
|
174 | 148 |
|
175 | |
start := (32 / 8) / 2
|
176 | |
chunks := 7
|
177 | |
k := length / chunks
|
178 | |
tail := (length - start) % k
|
|
149 |
for j := start; j+k <= length; j += k {
|
|
150 |
hasher.Write(buf[j : j+k])
|
|
151 |
}
|
179 | 152 |
|
180 | |
b.ResetTimer()
|
181 | |
for i := 0; i < b.N; i++ {
|
182 | |
hasher := New32()
|
183 | |
hasher.Write(buf[0:start])
|
184 | |
|
185 | |
for j := start; j+k <= length; j += k {
|
186 | |
hasher.Write(buf[j : j+k])
|
187 | |
}
|
188 | |
|
189 | |
hasher.Write(buf[length-tail:])
|
190 | |
hasher.Sum32()
|
|
153 |
hasher.Write(buf[length-tail:])
|
|
154 |
hasher.Sum32()
|
|
155 |
}
|
|
156 |
})
|
191 | 157 |
}
|
192 | 158 |
}
|
193 | 159 |
|
194 | |
func BenchmarkPartial32_8(b *testing.B) {
|
195 | |
benchPartial32(b, 8)
|
196 | |
}
|
197 | |
func BenchmarkPartial32_16(b *testing.B) {
|
198 | |
benchPartial32(b, 16)
|
199 | |
}
|
200 | |
func BenchmarkPartial32_32(b *testing.B) {
|
201 | |
benchPartial32(b, 32)
|
202 | |
}
|
203 | |
func BenchmarkPartial32_64(b *testing.B) {
|
204 | |
benchPartial32(b, 64)
|
205 | |
}
|
206 | |
func BenchmarkPartial32_128(b *testing.B) {
|
207 | |
benchPartial32(b, 128)
|
208 | |
}
|
209 | |
|
210 | |
//---
|
211 | |
|
212 | |
func bench128(b *testing.B, length int) {
|
213 | |
buf := make([]byte, length)
|
214 | |
b.SetBytes(int64(length))
|
215 | |
b.ResetTimer()
|
216 | |
for i := 0; i < b.N; i++ {
|
217 | |
Sum128(buf)
|
|
160 |
func Benchmark64(b *testing.B) {
|
|
161 |
buf := make([]byte, 8192)
|
|
162 |
for length := 1; length <= cap(buf); length *= 2 {
|
|
163 |
b.Run(strconv.Itoa(length), func(b *testing.B) {
|
|
164 |
buf = buf[:length]
|
|
165 |
b.SetBytes(int64(length))
|
|
166 |
b.ReportAllocs()
|
|
167 |
b.ResetTimer()
|
|
168 |
for i := 0; i < b.N; i++ {
|
|
169 |
Sum64(buf)
|
|
170 |
}
|
|
171 |
})
|
218 | 172 |
}
|
219 | 173 |
}
|
220 | 174 |
|
221 | |
func Benchmark128_1(b *testing.B) {
|
222 | |
bench128(b, 1)
|
|
175 |
func Benchmark128(b *testing.B) {
|
|
176 |
buf := make([]byte, 8192)
|
|
177 |
for length := 1; length <= cap(buf); length *= 2 {
|
|
178 |
b.Run(strconv.Itoa(length), func(b *testing.B) {
|
|
179 |
buf = buf[:length]
|
|
180 |
b.SetBytes(int64(length))
|
|
181 |
b.ReportAllocs()
|
|
182 |
b.ResetTimer()
|
|
183 |
for i := 0; i < b.N; i++ {
|
|
184 |
Sum128(buf)
|
|
185 |
}
|
|
186 |
})
|
|
187 |
}
|
223 | 188 |
}
|
224 | |
func Benchmark128_2(b *testing.B) {
|
225 | |
bench128(b, 2)
|
226 | |
}
|
227 | |
func Benchmark128_4(b *testing.B) {
|
228 | |
bench128(b, 4)
|
229 | |
}
|
230 | |
func Benchmark128_8(b *testing.B) {
|
231 | |
bench128(b, 8)
|
232 | |
}
|
233 | |
func Benchmark128_16(b *testing.B) {
|
234 | |
bench128(b, 16)
|
235 | |
}
|
236 | |
func Benchmark128_32(b *testing.B) {
|
237 | |
bench128(b, 32)
|
238 | |
}
|
239 | |
func Benchmark128_64(b *testing.B) {
|
240 | |
bench128(b, 64)
|
241 | |
}
|
242 | |
func Benchmark128_128(b *testing.B) {
|
243 | |
bench128(b, 128)
|
244 | |
}
|
245 | |
func Benchmark128_256(b *testing.B) {
|
246 | |
bench128(b, 256)
|
247 | |
}
|
248 | |
func Benchmark128_512(b *testing.B) {
|
249 | |
bench128(b, 512)
|
250 | |
}
|
251 | |
func Benchmark128_1024(b *testing.B) {
|
252 | |
bench128(b, 1024)
|
253 | |
}
|
254 | |
func Benchmark128_2048(b *testing.B) {
|
255 | |
bench128(b, 2048)
|
256 | |
}
|
257 | |
func Benchmark128_4096(b *testing.B) {
|
258 | |
bench128(b, 4096)
|
259 | |
}
|
260 | |
func Benchmark128_8192(b *testing.B) {
|
261 | |
bench128(b, 8192)
|
262 | |
}
|
263 | |
|
264 | |
//---
|