1// Copyright 2011 The Go Authors.  All rights reserved.
2// Use of this source code is governed by a BSD-style
3// license that can be found in the LICENSE file.
4
5// This benchmark tests gzip and gunzip performance.
6
7package go1
8
9import (
10	"bytes"
11	gz "compress/gzip"
12	"io"
13	"io/ioutil"
14	"testing"
15)
16
17var (
18	jsongunz = bytes.Repeat(jsonbytes, 10)
19	jsongz   []byte
20)
21
22func init() {
23	var buf bytes.Buffer
24	c := gz.NewWriter(&buf)
25	c.Write(jsongunz)
26	c.Close()
27	jsongz = buf.Bytes()
28}
29
30func gzip() {
31	c := gz.NewWriter(ioutil.Discard)
32	if _, err := c.Write(jsongunz); err != nil {
33		panic(err)
34	}
35	if err := c.Close(); err != nil {
36		panic(err)
37	}
38}
39
40func gunzip() {
41	r, err := gz.NewReader(bytes.NewBuffer(jsongz))
42	if err != nil {
43		panic(err)
44	}
45	if _, err := io.Copy(ioutil.Discard, r); err != nil {
46		panic(err)
47	}
48	r.Close()
49}
50
51func BenchmarkGzip(b *testing.B) {
52	b.SetBytes(int64(len(jsongunz)))
53	for i := 0; i < b.N; i++ {
54		gzip()
55	}
56}
57
58func BenchmarkGunzip(b *testing.B) {
59	b.SetBytes(int64(len(jsongunz)))
60	for i := 0; i < b.N; i++ {
61		gunzip()
62	}
63}
64