| 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) |
| } |
| } |
| } |