From 5dd922c935d28ded082f76a81e0c963938d7c3c3 Mon Sep 17 00:00:00 2001 From: Marcel van Lohuizen Date: Wed, 25 May 2016 14:54:41 +0200 Subject: [PATCH] compress/lzw: use Run for benchmarks load file only once per group. Change-Id: I965661507055e6e100506bf14d37133ecdd2cc5e Reviewed-on: https://go-review.googlesource.com/23423 Reviewed-by: Russ Cox Run-TryBot: Marcel van Lohuizen TryBot-Result: Gobot Gobot --- src/compress/lzw/reader_test.go | 61 ++++++++++++++++----------------- src/compress/lzw/writer_test.go | 55 ++++++++++++++--------------- 2 files changed, 54 insertions(+), 62 deletions(-) diff --git a/src/compress/lzw/reader_test.go b/src/compress/lzw/reader_test.go index c3a5c3a0aa..6b9f9a3da7 100644 --- a/src/compress/lzw/reader_test.go +++ b/src/compress/lzw/reader_test.go @@ -6,8 +6,10 @@ package lzw import ( "bytes" + "fmt" "io" "io/ioutil" + "math" "runtime" "strconv" "strings" @@ -118,42 +120,37 @@ func TestReader(t *testing.T) { } } -func benchmarkDecoder(b *testing.B, n int) { - b.StopTimer() - b.SetBytes(int64(n)) - buf0, err := ioutil.ReadFile("../testdata/e.txt") +func BenchmarkDecoder(b *testing.B) { + buf, err := ioutil.ReadFile("../testdata/e.txt") if err != nil { b.Fatal(err) } - if len(buf0) == 0 { + if len(buf) == 0 { b.Fatalf("test file has no data") } - compressed := new(bytes.Buffer) - w := NewWriter(compressed, LSB, 8) - for i := 0; i < n; i += len(buf0) { - if len(buf0) > n-i { - buf0 = buf0[:n-i] - } - w.Write(buf0) - } - w.Close() - buf1 := compressed.Bytes() - buf0, compressed, w = nil, nil, nil - runtime.GC() - b.StartTimer() - for i := 0; i < b.N; i++ { - io.Copy(ioutil.Discard, NewReader(bytes.NewReader(buf1), LSB, 8)) - } -} - -func BenchmarkDecoder1e4(b *testing.B) { - benchmarkDecoder(b, 1e4) -} -func BenchmarkDecoder1e5(b *testing.B) { - benchmarkDecoder(b, 1e5) -} - -func BenchmarkDecoder1e6(b *testing.B) { - benchmarkDecoder(b, 1e6) + for e := 4; e <= 6; e++ { + n := int(math.Pow10(e)) + b.Run(fmt.Sprint("1e", e), func(b *testing.B) { + b.StopTimer() + b.SetBytes(int64(n)) + buf0 := buf + compressed := new(bytes.Buffer) + w := NewWriter(compressed, LSB, 8) + for i := 0; i < n; i += len(buf0) { + if len(buf0) > n-i { + buf0 = buf0[:n-i] + } + w.Write(buf0) + } + w.Close() + buf1 := compressed.Bytes() + buf0, compressed, w = nil, nil, nil + runtime.GC() + b.StartTimer() + for i := 0; i < b.N; i++ { + io.Copy(ioutil.Discard, NewReader(bytes.NewReader(buf1), LSB, 8)) + } + }) + } } diff --git a/src/compress/lzw/writer_test.go b/src/compress/lzw/writer_test.go index 66d761727f..4979f8b352 100644 --- a/src/compress/lzw/writer_test.go +++ b/src/compress/lzw/writer_test.go @@ -5,9 +5,11 @@ package lzw import ( + "fmt" "internal/testenv" "io" "io/ioutil" + "math" "os" "runtime" "testing" @@ -122,41 +124,34 @@ func TestSmallLitWidth(t *testing.T) { } } -func benchmarkEncoder(b *testing.B, n int) { - b.StopTimer() - b.SetBytes(int64(n)) - buf0, err := ioutil.ReadFile("../testdata/e.txt") +func BenchmarkEncoder(b *testing.B) { + buf, err := ioutil.ReadFile("../testdata/e.txt") if err != nil { b.Fatal(err) } - if len(buf0) == 0 { + if len(buf) == 0 { b.Fatalf("test file has no data") } - buf1 := make([]byte, n) - for i := 0; i < n; i += len(buf0) { - if len(buf0) > n-i { - buf0 = buf0[:n-i] + + for e := 4; e <= 6; e++ { + n := int(math.Pow10(e)) + buf0 := buf + buf1 := make([]byte, n) + for i := 0; i < n; i += len(buf0) { + if len(buf0) > n-i { + buf0 = buf0[:n-i] + } + copy(buf1[i:], buf0) } - copy(buf1[i:], buf0) - } - buf0 = nil - runtime.GC() - b.StartTimer() - for i := 0; i < b.N; i++ { - w := NewWriter(ioutil.Discard, LSB, 8) - w.Write(buf1) - w.Close() + buf0 = nil + runtime.GC() + b.Run(fmt.Sprint("1e", e), func(b *testing.B) { + b.SetBytes(int64(n)) + for i := 0; i < b.N; i++ { + w := NewWriter(ioutil.Discard, LSB, 8) + w.Write(buf1) + w.Close() + } + }) } } - -func BenchmarkEncoder1e4(b *testing.B) { - benchmarkEncoder(b, 1e4) -} - -func BenchmarkEncoder1e5(b *testing.B) { - benchmarkEncoder(b, 1e5) -} - -func BenchmarkEncoder1e6(b *testing.B) { - benchmarkEncoder(b, 1e6) -} -- 2.48.1