// Copyright 2011 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// This benchmark tests gzip and gunzip performance.

package go1

import (
	"bytes"
	gz "compress/gzip"
	"io"
	"io/ioutil"
	"testing"
)

var (
	jsongunz = bytes.Repeat(jsonbytes, 10)
	jsongz   []byte
)

func init() {
	var buf bytes.Buffer
	c := gz.NewWriter(&buf)
	c.Write(jsongunz)
	c.Close()
	jsongz = buf.Bytes()
}

func gzip() {
	c := gz.NewWriter(ioutil.Discard)
	if _, err := c.Write(jsongunz); err != nil {
		panic(err)
	}
	if err := c.Close(); err != nil {
		panic(err)
	}
}

func gunzip() {
	r, err := gz.NewReader(bytes.NewBuffer(jsongz))
	if err != nil {
		panic(err)
	}
	if _, err := io.Copy(ioutil.Discard, r); err != nil {
		panic(err)
	}
	r.Close()
}

func BenchmarkGzip(b *testing.B) {
	b.SetBytes(int64(len(jsongunz)))
	for i := 0; i < b.N; i++ {
		gzip()
	}
}

func BenchmarkGunzip(b *testing.B) {
	b.SetBytes(int64(len(jsongunz)))
	for i := 0; i < b.N; i++ {
		gunzip()
	}
}
