huangcm
2025-08-25 f350412dc55c15118d0a7925d1071877498e5e24
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
package proto_test
 
import (
   "fmt"
   "reflect"
   "testing"
 
   "github.com/golang/protobuf/proto"
   ppb "github.com/golang/protobuf/proto/proto3_proto"
)
 
func TestMap(t *testing.T) {
   var b []byte
   fmt.Sscanf("a2010c0a044b657931120456616c31a201130a044b657932120556616c3261120456616c32a201240a044b6579330d05000000120556616c33621a0556616c3361120456616c331505000000a20100a201260a044b657934130a07536f6d6555524c1209536f6d655469746c651a08536e69707065743114", "%x", &b)
 
   var m ppb.Message
   if err := proto.Unmarshal(b, &m); err != nil {
       t.Fatalf("proto.Unmarshal error: %v", err)
   }
 
   got := m.StringMap
   want := map[string]string{
       "":     "",
       "Key1": "Val1",
       "Key2": "Val2",
       "Key3": "Val3",
       "Key4": "",
   }
 
   if !reflect.DeepEqual(got, want) {
       t.Errorf("maps differ:\ngot  %#v\nwant %#v", got, want)
   }
}
 
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)
       }
   }
}