]> Cypherpunks repositories - gostls13.git/commitdiff
compress/bzip2: fix benchmark to actually measure decompression rate
authorJoe Tsai <joetsai@digital-static.net>
Wed, 9 Dec 2015 02:26:22 +0000 (18:26 -0800)
committerMatthew Dempsky <mdempsky@google.com>
Sun, 28 Feb 2016 11:06:40 +0000 (11:06 +0000)
Motivation:
* Previously, the size of the compressed data was used for metrics,
rather than the uncompressed size. This causes the library to appear
to perform poorly relative to C or other implementation. Switch it
to use the uncompressed size so that it matches how decompression
benchmarks are usually done (like in compress/flate). This also makes
it easier to compare bzip2 rates to other algorithms since they measure
performance in this way.
* Also, reset the timer after doing initialization work.

Change-Id: I32112c2ee8e7391e658c9cf31039f70a689d9b9d
Reviewed-on: https://go-review.googlesource.com/17611
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>

src/compress/bzip2/bzip2_test.go

index 2a2136df4df6189dae212d3e0503ce8f1e2ce0cc..2acf40290ce51bb3df3635925057085135fc9eb1 100644 (file)
@@ -194,7 +194,17 @@ func benchmarkDecode(b *testing.B, testfile int) {
        if err != nil {
                b.Fatal(err)
        }
-       b.SetBytes(int64(len(compressed)))
+
+       // Determine the uncompressed size of testfile.
+       uncompressedSize, err := io.Copy(ioutil.Discard, NewReader(bytes.NewReader(compressed)))
+       if err != nil {
+               b.Fatal(err)
+       }
+
+       b.SetBytes(uncompressedSize)
+       b.ReportAllocs()
+       b.ResetTimer()
+
        for i := 0; i < b.N; i++ {
                r := bytes.NewReader(compressed)
                io.Copy(ioutil.Discard, NewReader(r))