diff options
Diffstat (limited to 'libgo/go/crypto/md5/md5_test.go')
-rw-r--r-- | libgo/go/crypto/md5/md5_test.go | 58 |
1 files changed, 42 insertions, 16 deletions
diff --git a/libgo/go/crypto/md5/md5_test.go b/libgo/go/crypto/md5/md5_test.go index b474a90d5a3..cac39ad054b 100644 --- a/libgo/go/crypto/md5/md5_test.go +++ b/libgo/go/crypto/md5/md5_test.go @@ -9,6 +9,7 @@ import ( "fmt" "io" "testing" + "unsafe" ) type md5Test struct { @@ -54,13 +55,19 @@ func TestGolden(t *testing.T) { for i := 0; i < len(golden); i++ { g := golden[i] c := md5.New() - for j := 0; j < 3; j++ { + buf := make([]byte, len(g.in)+4) + for j := 0; j < 3+4; j++ { if j < 2 { io.WriteString(c, g.in) - } else { + } else if j == 2 { io.WriteString(c, g.in[0:len(g.in)/2]) c.Sum(nil) io.WriteString(c, g.in[len(g.in)/2:]) + } else if j > 2 { + // test unaligned write + buf = buf[1:] + copy(buf, g.in) + c.Write(buf[:len(g.in)]) } s := fmt.Sprintf("%x", c.Sum(nil)) if s != g.out { @@ -80,26 +87,45 @@ func ExampleNew() { } var bench = md5.New() -var buf = makeBuf() +var buf = make([]byte, 8192+1) +var sum = make([]byte, bench.Size()) -func makeBuf() []byte { - b := make([]byte, 8<<10) - for i := range b { - b[i] = byte(i) +func benchmarkSize(b *testing.B, size int, unaligned bool) { + b.SetBytes(int64(size)) + buf := buf + if unaligned { + if uintptr(unsafe.Pointer(&buf[0]))&(unsafe.Alignof(uint32(0))-1) == 0 { + buf = buf[1:] + } + } + b.ResetTimer() + for i := 0; i < b.N; i++ { + bench.Reset() + bench.Write(buf[:size]) + bench.Sum(sum[:0]) } - return b +} + +func BenchmarkHash8Bytes(b *testing.B) { + benchmarkSize(b, 8, false) } func BenchmarkHash1K(b *testing.B) { - b.SetBytes(1024) - for i := 0; i < b.N; i++ { - bench.Write(buf[:1024]) - } + benchmarkSize(b, 1024, false) } func BenchmarkHash8K(b *testing.B) { - b.SetBytes(int64(len(buf))) - for i := 0; i < b.N; i++ { - bench.Write(buf) - } + benchmarkSize(b, 8192, false) +} + +func BenchmarkHash8BytesUnaligned(b *testing.B) { + benchmarkSize(b, 8, true) +} + +func BenchmarkHash1KUnaligned(b *testing.B) { + benchmarkSize(b, 1024, true) +} + +func BenchmarkHash8KUnaligned(b *testing.B) { + benchmarkSize(b, 8192, true) } |