|
|
@@ -0,0 +1,46 @@
|
|
|
+package proto_test
|
|
|
+
|
|
|
+import (
|
|
|
+ "fmt"
|
|
|
+ "testing"
|
|
|
+
|
|
|
+ "github.com/golang/protobuf/proto"
|
|
|
+ ppb "github.com/golang/protobuf/proto/proto3_proto"
|
|
|
+)
|
|
|
+
|
|
|
+func marshalled() []byte {
|
|
|
+ m := &ppb.IntMaps{}
|
|
|
+ for i := 0; i < 1000; i++ {
|
|
|
+ m.Maps = append(m.Maps, &ppb.IntMap{
|
|
|
+ Rtt: map[int32]int32{1: 2},
|
|
|
+ })
|
|
|
+ }
|
|
|
+ b, err := proto.Marshal(m)
|
|
|
+ if err != nil {
|
|
|
+ panic(fmt.Sprintf("Can't marshal %+v: %v", m, err))
|
|
|
+ }
|
|
|
+ return b
|
|
|
+}
|
|
|
+
|
|
|
+func BenchmarkConcurrentMapUnmarshal(b *testing.B) {
|
|
|
+ in := marshalled()
|
|
|
+ b.RunParallel(func(pb *testing.PB) {
|
|
|
+ for pb.Next() {
|
|
|
+ var out ppb.IntMaps
|
|
|
+ if err := proto.Unmarshal(in, &out); err != nil {
|
|
|
+ b.Errorf("Can't unmarshal ppb.IntMaps: %v", err)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ })
|
|
|
+}
|
|
|
+
|
|
|
+func BenchmarkSequentialMapUnmarshal(b *testing.B) {
|
|
|
+ in := marshalled()
|
|
|
+ b.ResetTimer()
|
|
|
+ for i := 0; i < b.N; i++ {
|
|
|
+ var out ppb.IntMaps
|
|
|
+ if err := proto.Unmarshal(in, &out); err != nil {
|
|
|
+ b.Errorf("Can't unmarshal ppb.IntMaps: %v", err)
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|