// 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, err := gz.NewWriter(&buf)
	if err != nil {
		panic(err)
	}
	c.Write(jsongunz)
	c.Close()
	jsongz = buf.Bytes()
}

func gzip() {
	c, err := gz.NewWriter(ioutil.Discard)
	if err != nil {
		panic(err)
	}
	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()
	}
}
