@@ -54,8 +54,6 @@ import (
54
54
"fmt"
55
55
"strings"
56
56
"testing"
57
-
58
- "github.com/klauspost/cpuid/v2"
59
57
)
60
58
61
59
type sha256Test struct {
@@ -2217,7 +2215,7 @@ func TestGolden(t *testing.T) {
2217
2215
}()
2218
2216
2219
2217
if true {
2220
- blockfunc = blockfuncGeneric
2218
+ blockfunc = blockfuncForceGeneric
2221
2219
for _ , g := range golden {
2222
2220
s := fmt .Sprintf ("%x" , Sum256 ([]byte (g .in )))
2223
2221
if Sum256 ([]byte (g .in )) != g .out {
@@ -2226,8 +2224,8 @@ func TestGolden(t *testing.T) {
2226
2224
}
2227
2225
}
2228
2226
2229
- if cpuid . CPU . Supports ( cpuid . SHA , cpuid . SSSE3 , cpuid . SSE4 ) {
2230
- blockfunc = blockfuncSha
2227
+ if hasIntelSha {
2228
+ blockfunc = blockfuncIntelSha
2231
2229
for _ , g := range golden {
2232
2230
s := fmt .Sprintf ("%x" , Sum256 ([]byte (g .in )))
2233
2231
if Sum256 ([]byte (g .in )) != g .out {
@@ -2237,7 +2235,7 @@ func TestGolden(t *testing.T) {
2237
2235
}
2238
2236
2239
2237
if hasArmSha2 () {
2240
- blockfunc = blockfuncArm
2238
+ blockfunc = blockfuncArmSha2
2241
2239
for _ , g := range golden {
2242
2240
s := fmt .Sprintf ("%x" , Sum256 ([]byte (g .in )))
2243
2241
if Sum256 ([]byte (g .in )) != g .out {
@@ -2269,27 +2267,34 @@ func benchmarkSize(b *testing.B, size int) {
2269
2267
b .ResetTimer ()
2270
2268
for i := 0 ; i < b .N ; i ++ {
2271
2269
bench .Reset ()
2272
- bench .Write (buf [: size ] )
2270
+ bench .Write (buf )
2273
2271
bench .Sum (sum [:0 ])
2274
2272
}
2275
2273
}
2276
2274
2277
2275
func BenchmarkHash (b * testing.B ) {
2278
- algos := [] struct {
2276
+ type alg struct {
2279
2277
n string
2280
2278
t blockfuncType
2281
- f bool
2282
- }{
2283
- {"SHA_" , blockfuncSha , hasSHAExtensions ()},
2284
- {"GEN_" , blockfuncGeneric , true },
2285
2279
}
2280
+ algos := make ([]alg , 0 , 2 )
2281
+
2282
+ algos = append (algos , alg {"Generic" , blockfuncForceGeneric })
2283
+ if hasIntelSha {
2284
+ algos = append (algos , alg {"IntelSHA" , blockfuncIntelSha })
2285
+ }
2286
+ if hasArmSha2 () {
2287
+ algos = append (algos , alg {"ArmSha2" , blockfuncArmSha2 })
2288
+ }
2289
+ algos = append (algos , alg {"GoStdlib" , blockfuncStdlib })
2286
2290
2287
2291
sizes := []struct {
2288
2292
n string
2289
2293
f func (* testing.B , int )
2290
2294
s int
2291
2295
}{
2292
2296
{"8Bytes" , benchmarkSize , 1 << 3 },
2297
+ {"64Bytes" , benchmarkSize , 1 << 6 },
2293
2298
{"1K" , benchmarkSize , 1 << 10 },
2294
2299
{"8K" , benchmarkSize , 1 << 13 },
2295
2300
{"1M" , benchmarkSize , 1 << 20 },
@@ -2298,14 +2303,15 @@ func BenchmarkHash(b *testing.B) {
2298
2303
}
2299
2304
2300
2305
for _ , a := range algos {
2301
- if a .f {
2302
- blockfuncSaved := blockfunc
2306
+ func () {
2307
+ orig := blockfunc
2308
+ defer func () { blockfunc = orig }()
2309
+
2303
2310
blockfunc = a .t
2304
2311
for _ , y := range sizes {
2305
2312
s := a .n + "/" + y .n
2306
2313
b .Run (s , func (b * testing.B ) { y .f (b , y .s ) })
2307
2314
}
2308
- blockfunc = blockfuncSaved
2309
- }
2315
+ }()
2310
2316
}
2311
2317
}
0 commit comments