// 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" "testing" ) func makeGunzip(jsonbytes []byte) []byte { return bytes.Repeat(jsonbytes, 10) } func makeGzip(jsongunz []byte) []byte { var buf bytes.Buffer c := gz.NewWriter(&buf) c.Write(jsongunz) c.Close() return buf.Bytes() } func gzip(jsongunz []byte) { c := gz.NewWriter(io.Discard) if _, err := c.Write(jsongunz); err != nil { panic(err) } if err := c.Close(); err != nil { panic(err) } } func gunzip(jsongz []byte) { r, err := gz.NewReader(bytes.NewBuffer(jsongz)) if err != nil { panic(err) } if _, err := io.Copy(io.Discard, r); err != nil { panic(err) } r.Close() } func BenchmarkGzip(b *testing.B) { jsonbytes := makeJsonBytes() jsongunz := makeGunzip(jsonbytes) b.ResetTimer() b.SetBytes(int64(len(jsongunz))) for i := 0; i < b.N; i++ { gzip(jsongunz) } } func BenchmarkGunzip(b *testing.B) { jsonbytes := makeJsonBytes() jsongunz := makeGunzip(jsonbytes) jsongz := makeGzip(jsongunz) b.ResetTimer() b.SetBytes(int64(len(jsongunz))) for i := 0; i < b.N; i++ { gunzip(jsongz) } }