mirror of
https://github.com/autc04/Retro68.git
synced 2025-02-27 05:30:18 +00:00
97 lines
2.1 KiB
Go
97 lines
2.1 KiB
Go
|
// 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.
|
||
|
|
||
|
package gob
|
||
|
|
||
|
import (
|
||
|
"bytes"
|
||
|
"fmt"
|
||
|
"io"
|
||
|
"os"
|
||
|
"runtime"
|
||
|
"testing"
|
||
|
)
|
||
|
|
||
|
type Bench struct {
|
||
|
A int
|
||
|
B float64
|
||
|
C string
|
||
|
D []byte
|
||
|
}
|
||
|
|
||
|
func benchmarkEndToEnd(r io.Reader, w io.Writer, b *testing.B) {
|
||
|
b.StopTimer()
|
||
|
enc := NewEncoder(w)
|
||
|
dec := NewDecoder(r)
|
||
|
bench := &Bench{7, 3.2, "now is the time", []byte("for all good men")}
|
||
|
b.StartTimer()
|
||
|
for i := 0; i < b.N; i++ {
|
||
|
if enc.Encode(bench) != nil {
|
||
|
panic("encode error")
|
||
|
}
|
||
|
if dec.Decode(bench) != nil {
|
||
|
panic("decode error")
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func BenchmarkEndToEndPipe(b *testing.B) {
|
||
|
r, w, err := os.Pipe()
|
||
|
if err != nil {
|
||
|
b.Fatal("can't get pipe:", err)
|
||
|
}
|
||
|
benchmarkEndToEnd(r, w, b)
|
||
|
}
|
||
|
|
||
|
func BenchmarkEndToEndByteBuffer(b *testing.B) {
|
||
|
var buf bytes.Buffer
|
||
|
benchmarkEndToEnd(&buf, &buf, b)
|
||
|
}
|
||
|
|
||
|
func TestCountEncodeMallocs(t *testing.T) {
|
||
|
var buf bytes.Buffer
|
||
|
enc := NewEncoder(&buf)
|
||
|
bench := &Bench{7, 3.2, "now is the time", []byte("for all good men")}
|
||
|
memstats := new(runtime.MemStats)
|
||
|
runtime.ReadMemStats(memstats)
|
||
|
mallocs := 0 - memstats.Mallocs
|
||
|
const count = 1000
|
||
|
for i := 0; i < count; i++ {
|
||
|
err := enc.Encode(bench)
|
||
|
if err != nil {
|
||
|
t.Fatal("encode:", err)
|
||
|
}
|
||
|
}
|
||
|
runtime.ReadMemStats(memstats)
|
||
|
mallocs += memstats.Mallocs
|
||
|
fmt.Printf("mallocs per encode of type Bench: %d\n", mallocs/count)
|
||
|
}
|
||
|
|
||
|
func TestCountDecodeMallocs(t *testing.T) {
|
||
|
var buf bytes.Buffer
|
||
|
enc := NewEncoder(&buf)
|
||
|
bench := &Bench{7, 3.2, "now is the time", []byte("for all good men")}
|
||
|
const count = 1000
|
||
|
for i := 0; i < count; i++ {
|
||
|
err := enc.Encode(bench)
|
||
|
if err != nil {
|
||
|
t.Fatal("encode:", err)
|
||
|
}
|
||
|
}
|
||
|
dec := NewDecoder(&buf)
|
||
|
memstats := new(runtime.MemStats)
|
||
|
runtime.ReadMemStats(memstats)
|
||
|
mallocs := 0 - memstats.Mallocs
|
||
|
for i := 0; i < count; i++ {
|
||
|
*bench = Bench{}
|
||
|
err := dec.Decode(&bench)
|
||
|
if err != nil {
|
||
|
t.Fatal("decode:", err)
|
||
|
}
|
||
|
}
|
||
|
runtime.ReadMemStats(memstats)
|
||
|
mallocs += memstats.Mallocs
|
||
|
fmt.Printf("mallocs per decode of type Bench: %d\n", mallocs/count)
|
||
|
}
|