github.com/GuanceCloud/cliutils@v1.1.21/point/easyproto_test.go (about) 1 package point 2 3 import ( 4 T "testing" 5 6 "github.com/stretchr/testify/assert" 7 ) 8 9 func BenchmarkEasyproto(b *T.B) { 10 r := NewRander(WithRandText(3)) 11 pts := r.Rand(1000) 12 13 pbpts := &PBPoints{} 14 15 for _, pt := range pts { 16 pbpts.Arr = append(pbpts.Arr, pt.pt) 17 } 18 19 b.ResetTimer() 20 b.Run("easyproto-encode", func(b *T.B) { 21 for i := 0; i < b.N; i++ { 22 var dst []byte 23 marshalPoints(pts, dst) 24 } 25 }) 26 27 b.ResetTimer() 28 b.Run("gogopb-encode", func(b *T.B) { 29 for i := 0; i < b.N; i++ { 30 pbpts.Marshal() 31 } 32 }) 33 34 src, err := pbpts.Marshal() 35 assert.NoError(b, err) 36 b.ResetTimer() 37 b.Run("easyproto-decode", func(b *T.B) { 38 for i := 0; i < b.N; i++ { 39 unmarshalPoints(src) 40 } 41 }) 42 43 b.Run("gogopb-decode", func(b *T.B) { 44 for i := 0; i < b.N; i++ { 45 var pbpts PBPoints 46 pbpts.Unmarshal(src) 47 } 48 }) 49 50 b.Run("easyproto-decode-under-point-pool", func(b *T.B) { 51 pp := NewReservedCapPointPool(100) 52 SetPointPool(pp) 53 54 b.Cleanup(func() { 55 b.Logf("ptpool: %s", pp.(*ReservedCapPointPool).String()) 56 ClearPointPool() 57 }) 58 59 for i := 0; i < b.N; i++ { 60 pts, _ := unmarshalPoints(src) 61 62 for _, pt := range pts { 63 pp.Put(pt) 64 } 65 } 66 }) 67 68 /* 69 goos: darwin 70 goarch: arm64 71 pkg: github.com/GuanceCloud/cliutils/point 72 BenchmarkEasyproto 73 BenchmarkEasyproto/easyproto-encode 74 BenchmarkEasyproto/easyproto-encode-10 1161 1034532 ns/op 1202131 B/op 1 allocs/op 75 BenchmarkEasyproto/gogopb-encode 76 BenchmarkEasyproto/gogopb-encode-10 3010 401256 ns/op 1089548 B/op 1 allocs/op 77 BenchmarkEasyproto/easyproto-decode 78 BenchmarkEasyproto/easyproto-decode-10 560 2119419 ns/op 2138183 B/op 57014 allocs/op 79 BenchmarkEasyproto/easyproto-decode#01 80 BenchmarkEasyproto/easyproto-decode#01-10 601 1958508 ns/op 3013150 B/op 69012 allocs/op 81 PASS 82 ok github.com/GuanceCloud/cliutils/point 6.254s 83 */ 84 } 85 86 func TestEasyproto(t *T.T) { 87 t.Run("marshal", func(t *T.T) { 88 var kvs KVs 89 kvs = kvs.AddV2("f1", 123, false) 90 kvs = kvs.AddV2("f2", 1.23, false) 91 kvs = kvs.AddV2("f3", uint(42), false, WithKVUnit("year"), WithKVType(GAUGE)) 92 kvs = kvs.AddV2("f4", false, false) 93 kvs = kvs.AddV2("f5", []byte("binary-data"), false) 94 kvs = kvs.AddV2("f6", "text-data", false) 95 kvs = kvs.AddV2("tag-1", "value-1", true, WithKVTagSet(true)) 96 97 pts := []*Point{ 98 NewPointV2("p1", kvs, WithTimestamp(123)), 99 } 100 101 var dst []byte 102 103 // marshaled with easyproto 104 dst = marshalPoints(pts, dst) 105 106 // unmarshal with gogo-proto 107 dec := GetDecoder(WithDecEncoding(Protobuf), WithDecEasyproto(false)) 108 defer PutDecoder(dec) 109 110 pts2, err := dec.Decode(dst) 111 assert.NoError(t, err) 112 assert.Len(t, pts2, 1) 113 114 assert.Equal(t, pts[0].Pretty(), pts2[0].Pretty()) 115 116 t.Logf("pt: %s", pts[0].Pretty()) 117 }) 118 119 t.Run("unmarshal", func(t *T.T) { 120 var kvs KVs 121 kvs = kvs.AddV2("f1", 123, false, WithKVUnit("dollar"), WithKVType(GAUGE)) 122 kvs = kvs.AddV2("f2", 1.23, false, WithKVUnit("byte"), WithKVType(COUNT)) 123 kvs = kvs.AddV2("f3", uint(42), false) 124 kvs = kvs.AddV2("f4", false, false) 125 kvs = kvs.AddV2("f5", []byte("binary-data"), false) 126 kvs = kvs.AddV2("f6", "text-data", false) 127 kvs = kvs.AddV2("tag-1", "value-1", false, WithKVTagSet(true)) 128 129 pts := []*Point{ 130 NewPointV2("p1", kvs, WithTimestamp(123)), 131 } 132 t.Logf("pt: %s", pts[0].Pretty()) 133 134 var dst []byte 135 dst = marshalPoints(pts, dst) 136 137 pts2, err := unmarshalPoints(dst) 138 assert.NoError(t, err) 139 140 assert.Len(t, pts2, 1) 141 142 assert.Equal(t, pts[0].Pretty(), pts2[0].Pretty()) 143 144 t.Logf("pt2: %s", pts2[0].Pretty()) 145 }) 146 }