mirror of https://github.com/poanetwork/gecko.git
56 lines
1.6 KiB
Go
56 lines
1.6 KiB
Go
// (c) 2019-2020, Ava Labs, Inc. All rights reserved.
|
|
// See the file LICENSE for licensing terms.
|
|
|
|
package codec
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/ava-labs/gecko/utils/wrappers"
|
|
)
|
|
|
|
// BenchmarkMarshal benchmarks the codec's marshal function
|
|
func BenchmarkMarshal(b *testing.B) {
|
|
temp := Foo(&MyInnerStruct{})
|
|
myStructInstance := myStruct{
|
|
InnerStruct: MyInnerStruct{"hello"},
|
|
InnerStruct2: &MyInnerStruct{"yello"},
|
|
Member1: 1,
|
|
MySlice: []byte{1, 2, 3, 4},
|
|
MySlice2: []string{"one", "two", "three"},
|
|
MySlice3: []MyInnerStruct{MyInnerStruct{"a"}, MyInnerStruct{"b"}, MyInnerStruct{"c"}},
|
|
MySlice4: []*MyInnerStruct2{&MyInnerStruct2{true}, &MyInnerStruct2{}},
|
|
MySlice5: []Foo{&MyInnerStruct2{true}, &MyInnerStruct2{}},
|
|
MyArray: [4]byte{5, 6, 7, 8},
|
|
MyArray2: [5]string{"four", "five", "six", "seven"},
|
|
MyArray3: [3]MyInnerStruct{MyInnerStruct{"d"}, MyInnerStruct{"e"}, MyInnerStruct{"f"}},
|
|
MyArray4: [2]*MyInnerStruct2{&MyInnerStruct2{}, &MyInnerStruct2{true}},
|
|
MyInterface: &MyInnerStruct{"yeet"},
|
|
InnerStruct3: MyInnerStruct3{
|
|
Str: "str",
|
|
M1: MyInnerStruct{
|
|
Str: "other str",
|
|
},
|
|
F: &MyInnerStruct2{},
|
|
},
|
|
MyPointer: &temp,
|
|
}
|
|
|
|
codec := NewDefault()
|
|
codec.RegisterType(&MyInnerStruct{}) // Register the types that may be unmarshaled into interfaces
|
|
codec.RegisterType(&MyInnerStruct2{})
|
|
b.ResetTimer()
|
|
for n := 0; n < b.N; n++ {
|
|
codec.Marshal(myStructInstance)
|
|
}
|
|
}
|
|
|
|
func BenchmarkMarshalNonCodec(b *testing.B) {
|
|
p := wrappers.Packer{}
|
|
for n := 0; n < b.N; n++ {
|
|
for i := 0; i < 30; i++ {
|
|
p.PackStr("yay")
|
|
}
|
|
}
|
|
}
|