func (d *digest) Sum(in []byte) []byte {
        s := d.Sum32()
-       in = append(in, byte(s>>24))
-       in = append(in, byte(s>>16))
-       in = append(in, byte(s>>8))
-       in = append(in, byte(s))
-       return in
+       return append(in, byte(s>>24), byte(s>>16), byte(s>>8), byte(s))
 }
 
 // Checksum returns the Adler-32 checksum of data.
 
 package adler32
 
 import (
-       "bytes"
        "io"
        "testing"
 )
        }
 }
 
-func BenchmarkGolden(b *testing.B) {
-       b.StopTimer()
-       c := New()
-       var buf bytes.Buffer
-       for _, g := range golden {
-               buf.Write([]byte(g.in))
+func BenchmarkAdler32KB(b *testing.B) {
+       b.SetBytes(1024)
+       data := make([]byte, 1024)
+       for i := range data {
+               data[i] = byte(i)
        }
-       b.StartTimer()
+       h := New()
+       in := make([]byte, 0, h.Size())
+
+       b.ResetTimer()
        for i := 0; i < b.N; i++ {
-               c.Write(buf.Bytes())
+               h.Reset()
+               h.Write(data)
+               h.Sum(in)
        }
 }
 
 
 func (d *digest) Sum(in []byte) []byte {
        s := d.Sum32()
-       in = append(in, byte(s>>24))
-       in = append(in, byte(s>>16))
-       in = append(in, byte(s>>8))
-       in = append(in, byte(s))
-       return in
+       return append(in, byte(s>>24), byte(s>>16), byte(s>>8), byte(s))
 }
 
 // Checksum returns the CRC-32 checksum of data
 
 }
 
 func BenchmarkCrc32KB(b *testing.B) {
-       b.StopTimer()
-       data := make([]uint8, 1024)
-       for i := 0; i < 1024; i++ {
-               data[i] = uint8(i)
+       b.SetBytes(1024)
+       data := make([]byte, 1024)
+       for i := range data {
+               data[i] = byte(i)
        }
-       c := NewIEEE()
-       b.StartTimer()
-       b.SetBytes(int64(len(data)))
+       h := NewIEEE()
+       in := make([]byte, 0, h.Size())
 
+       b.ResetTimer()
        for i := 0; i < b.N; i++ {
-               c.Write(data)
+               h.Reset()
+               h.Write(data)
+               h.Sum(in)
        }
 }
 
 
 func (d *digest) Sum(in []byte) []byte {
        s := d.Sum64()
-       in = append(in, byte(s>>56))
-       in = append(in, byte(s>>48))
-       in = append(in, byte(s>>40))
-       in = append(in, byte(s>>32))
-       in = append(in, byte(s>>24))
-       in = append(in, byte(s>>16))
-       in = append(in, byte(s>>8))
-       in = append(in, byte(s))
-       return in
+       return append(in, byte(s>>56), byte(s>>48), byte(s>>40), byte(s>>32), byte(s>>24), byte(s>>16), byte(s>>8), byte(s))
 }
 
 // Checksum returns the CRC-64 checksum of data
 
 }
 
 func BenchmarkCrc64KB(b *testing.B) {
-       b.StopTimer()
-       data := make([]uint8, 1024)
-       for i := 0; i < 1024; i++ {
-               data[i] = uint8(i)
+       b.SetBytes(1024)
+       data := make([]byte, 1024)
+       for i := range data {
+               data[i] = byte(i)
        }
-       c := New(tab)
-       b.StartTimer()
+       h := New(tab)
+       in := make([]byte, 0, h.Size())
 
+       b.ResetTimer()
        for i := 0; i < b.N; i++ {
-               c.Write(data)
+               h.Reset()
+               h.Write(data)
+               h.Sum(in)
        }
 }
 
 
 func (s *sum32) Sum(in []byte) []byte {
        v := uint32(*s)
-       in = append(in, byte(v>>24))
-       in = append(in, byte(v>>16))
-       in = append(in, byte(v>>8))
-       in = append(in, byte(v))
-       return in
+       return append(in, byte(v>>24), byte(v>>16), byte(v>>8), byte(v))
 }
 
 func (s *sum32a) Sum(in []byte) []byte {
        v := uint32(*s)
-       in = append(in, byte(v>>24))
-       in = append(in, byte(v>>16))
-       in = append(in, byte(v>>8))
-       in = append(in, byte(v))
-       return in
+       return append(in, byte(v>>24), byte(v>>16), byte(v>>8), byte(v))
 }
 
 func (s *sum64) Sum(in []byte) []byte {
        v := uint64(*s)
-       in = append(in, byte(v>>56))
-       in = append(in, byte(v>>48))
-       in = append(in, byte(v>>40))
-       in = append(in, byte(v>>32))
-       in = append(in, byte(v>>24))
-       in = append(in, byte(v>>16))
-       in = append(in, byte(v>>8))
-       in = append(in, byte(v))
-       return in
+       return append(in, byte(v>>56), byte(v>>48), byte(v>>40), byte(v>>32), byte(v>>24), byte(v>>16), byte(v>>8), byte(v))
 }
 
 func (s *sum64a) Sum(in []byte) []byte {
        v := uint64(*s)
-       in = append(in, byte(v>>56))
-       in = append(in, byte(v>>48))
-       in = append(in, byte(v>>40))
-       in = append(in, byte(v>>32))
-       in = append(in, byte(v>>24))
-       in = append(in, byte(v>>16))
-       in = append(in, byte(v>>8))
-       in = append(in, byte(v))
-       return in
+       return append(in, byte(v>>56), byte(v>>48), byte(v>>40), byte(v>>32), byte(v>>24), byte(v>>16), byte(v>>8), byte(v))
 }
 
        "testing"
 )
 
-const testDataSize = 40
-
 type golden struct {
        sum  []byte
        text string
        }
 }
 
-func Benchmark32(b *testing.B) {
-       benchmark(b, New32())
+func BenchmarkFnv32KB(b *testing.B) {
+       benchmarkKB(b, New32())
 }
 
-func Benchmark32a(b *testing.B) {
-       benchmark(b, New32a())
+func BenchmarkFnv32aKB(b *testing.B) {
+       benchmarkKB(b, New32a())
 }
 
-func Benchmark64(b *testing.B) {
-       benchmark(b, New64())
+func BenchmarkFnv64KB(b *testing.B) {
+       benchmarkKB(b, New64())
 }
 
-func Benchmark64a(b *testing.B) {
-       benchmark(b, New64a())
+func BenchmarkFnv64aKB(b *testing.B) {
+       benchmarkKB(b, New64a())
 }
 
-func benchmark(b *testing.B, h hash.Hash) {
-       b.ResetTimer()
-       b.SetBytes(testDataSize)
-       data := make([]byte, testDataSize)
+func benchmarkKB(b *testing.B, h hash.Hash) {
+       b.SetBytes(1024)
+       data := make([]byte, 1024)
        for i := range data {
-               data[i] = byte(i + 'a')
+               data[i] = byte(i)
        }
+       in := make([]byte, 0, h.Size())
 
-       b.StartTimer()
-       for todo := b.N; todo != 0; todo-- {
+       b.ResetTimer()
+       for i := 0; i < b.N; i++ {
                h.Reset()
                h.Write(data)
-               h.Sum(nil)
+               h.Sum(in)
        }
 }