package blocks import ( "bytes" "encoding/gob" "encoding/json" "testing" "time" "github.com/ugorji/go/codec" "github.com/vmihailenco/msgpack" ) func BenchmarkTestCustom(b *testing.B) { b.StopTimer() h := &Header{ Network: "Header", Height: 123, Fees: 123, Time: time.Unix(123, 0), LastBlockHash: []byte("prevhash"), StateHash: []byte("statehash"), } buf := bytes.NewBuffer(nil) b.StartTimer() for i := 0; i < b.N; i++ { buf.Reset() h.WriteTo(buf) var n int64 var err error h2 := ReadHeader(buf, &n, &err) if h2.Network != "Header" { b.Fatalf("wrong name") } } } type HHeader struct { Network string `json:"N"` Height uint64 `json:"H"` Fees uint64 `json:"F"` Time uint64 `json:"T"` LastBlockHash []byte `json:"PH"` StateHash []byte `json:"SH"` } func BenchmarkTestJSON(b *testing.B) { b.StopTimer() h := &HHeader{ Network: "Header", Height: 123, Fees: 123, Time: 123, LastBlockHash: []byte("prevhash"), StateHash: []byte("statehash"), } h2 := &HHeader{} buf := bytes.NewBuffer(nil) enc := json.NewEncoder(buf) dec := json.NewDecoder(buf) b.StartTimer() for i := 0; i < b.N; i++ { buf.Reset() enc.Encode(h) dec.Decode(h2) if h2.Network != "Header" { b.Fatalf("wrong name") } } } func BenchmarkTestGob(b *testing.B) { b.StopTimer() h := &Header{ Network: "Header", Height: 123, Fees: 123, Time: time.Unix(123, 0), LastBlockHash: []byte("prevhash"), StateHash: []byte("statehash"), } h2 := &Header{} buf := bytes.NewBuffer(nil) enc := gob.NewEncoder(buf) dec := gob.NewDecoder(buf) b.StartTimer() for i := 0; i < b.N; i++ { buf.Reset() enc.Encode(h) dec.Decode(h2) if h2.Network != "Header" { b.Fatalf("wrong name") } } } func BenchmarkTestMsgPack(b *testing.B) { b.StopTimer() h := &Header{ Network: "Header", Height: 123, Fees: 123, Time: time.Unix(123, 0), LastBlockHash: []byte("prevhash"), StateHash: []byte("statehash"), } h2 := &Header{} buf := bytes.NewBuffer(nil) enc := msgpack.NewEncoder(buf) dec := msgpack.NewDecoder(buf) b.StartTimer() for i := 0; i < b.N; i++ { buf.Reset() enc.Encode(h) dec.Decode(h2) if h2.Network != "Header" { b.Fatalf("wrong name") } } } func BenchmarkTestMsgPack2(b *testing.B) { b.StopTimer() h := &Header{ Network: "Header", Height: 123, Fees: 123, Time: time.Unix(123, 0), LastBlockHash: []byte("prevhash"), StateHash: []byte("statehash"), } h2 := &Header{} var mh codec.MsgpackHandle handle := &mh buf := bytes.NewBuffer(nil) enc := codec.NewEncoder(buf, handle) dec := codec.NewDecoder(buf, handle) b.StartTimer() for i := 0; i < b.N; i++ { buf.Reset() enc.Encode(h) dec.Decode(h2) if h2.Network != "Header" { b.Fatalf("wrong name") } } }