|
|
@ -0,0 +1,167 @@ |
|
|
|
package blocks |
|
|
|
|
|
|
|
import ( |
|
|
|
"bytes" |
|
|
|
"encoding/gob" |
|
|
|
"encoding/json" |
|
|
|
"testing" |
|
|
|
|
|
|
|
. "github.com/tendermint/tendermint/binary" |
|
|
|
"github.com/ugorji/go/codec" |
|
|
|
"github.com/vmihailenco/msgpack" |
|
|
|
) |
|
|
|
|
|
|
|
func BenchmarkTestCustom(b *testing.B) { |
|
|
|
b.StopTimer() |
|
|
|
|
|
|
|
h := &Header{ |
|
|
|
Name: "Header", |
|
|
|
Height: 123, |
|
|
|
Fees: 123, |
|
|
|
Time: 123, |
|
|
|
PrevHash: ByteSlice("prevhash"), |
|
|
|
ValidationHash: ByteSlice("validationhash"), |
|
|
|
DataHash: ByteSlice("datahash"), |
|
|
|
} |
|
|
|
|
|
|
|
buf := bytes.NewBuffer(nil) |
|
|
|
|
|
|
|
b.StartTimer() |
|
|
|
for i := 0; i < b.N; i++ { |
|
|
|
buf.Reset() |
|
|
|
h.WriteTo(buf) |
|
|
|
h2 := ReadHeader(buf) |
|
|
|
if h2.Name != "Header" { |
|
|
|
b.Fatalf("wrong name") |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
type HHeader struct { |
|
|
|
Name string `json:"N"` |
|
|
|
Height uint64 `json:"H"` |
|
|
|
Fees uint64 `json:"F"` |
|
|
|
Time uint64 `json:"T"` |
|
|
|
PrevHash []byte `json:"PH"` |
|
|
|
ValidationHash []byte `json:"VH"` |
|
|
|
DataHash []byte `json:"DH"` |
|
|
|
} |
|
|
|
|
|
|
|
func BenchmarkTestJSON(b *testing.B) { |
|
|
|
b.StopTimer() |
|
|
|
|
|
|
|
h := &HHeader{ |
|
|
|
Name: "Header", |
|
|
|
Height: 123, |
|
|
|
Fees: 123, |
|
|
|
Time: 123, |
|
|
|
PrevHash: []byte("prevhash"), |
|
|
|
ValidationHash: []byte("validationhash"), |
|
|
|
DataHash: []byte("datahash"), |
|
|
|
} |
|
|
|
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.Name != "Header" { |
|
|
|
b.Fatalf("wrong name") |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
func BenchmarkTestGob(b *testing.B) { |
|
|
|
b.StopTimer() |
|
|
|
|
|
|
|
h := &Header{ |
|
|
|
Name: "Header", |
|
|
|
Height: 123, |
|
|
|
Fees: 123, |
|
|
|
Time: 123, |
|
|
|
PrevHash: []byte("prevhash"), |
|
|
|
ValidationHash: []byte("validationhash"), |
|
|
|
DataHash: []byte("datahash"), |
|
|
|
} |
|
|
|
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.Name != "Header" { |
|
|
|
b.Fatalf("wrong name") |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
func BenchmarkTestMsgPack(b *testing.B) { |
|
|
|
b.StopTimer() |
|
|
|
|
|
|
|
var mh codec.MsgpackHandle |
|
|
|
handle := &mh |
|
|
|
|
|
|
|
h := &Header{ |
|
|
|
Name: "Header", |
|
|
|
Height: 123, |
|
|
|
Fees: 123, |
|
|
|
Time: 123, |
|
|
|
PrevHash: []byte("prevhash"), |
|
|
|
ValidationHash: []byte("validationhash"), |
|
|
|
DataHash: []byte("datahash"), |
|
|
|
} |
|
|
|
h2 := &Header{} |
|
|
|
|
|
|
|
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.Name != "Header" { |
|
|
|
b.Fatalf("wrong name") |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
func BenchmarkTestMsgPack2(b *testing.B) { |
|
|
|
b.StopTimer() |
|
|
|
|
|
|
|
h := &Header{ |
|
|
|
Name: "Header", |
|
|
|
Height: 123, |
|
|
|
Fees: 123, |
|
|
|
Time: 123, |
|
|
|
PrevHash: []byte("prevhash"), |
|
|
|
ValidationHash: []byte("validationhash"), |
|
|
|
DataHash: []byte("datahash"), |
|
|
|
} |
|
|
|
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.Name != "Header" { |
|
|
|
b.Fatalf("wrong name") |
|
|
|
} |
|
|
|
} |
|
|
|
} |