github.com/Mrs4s/MiraiGo@v0.0.0-20240226124653-54bdd873e3fe/internal/proto/dynamic_test.go (about) 1 package proto 2 3 import ( 4 "bytes" 5 "math" 6 "testing" 7 ) 8 9 func benchEncoderUvarint(b *testing.B, v uint64) { 10 e := encoder{} 11 for i := 0; i < b.N; i++ { 12 e.buf = e.buf[:0] 13 e.uvarint(v) 14 } 15 } 16 17 func benchEncoderSvarint(b *testing.B, v int64) { 18 e := encoder{} 19 for i := 0; i < b.N; i++ { 20 e.buf = e.buf[:0] 21 e.svarint(v) 22 } 23 } 24 25 func Benchmark_encoder_uvarint(b *testing.B) { 26 b.Run("short", func(b *testing.B) { 27 benchEncoderUvarint(b, uint64(1)) 28 }) 29 b.Run("medium", func(b *testing.B) { 30 benchEncoderUvarint(b, uint64(114514)) 31 }) 32 b.Run("large", func(b *testing.B) { 33 benchEncoderUvarint(b, math.MaxUint64) 34 }) 35 } 36 37 func Benchmark_encoder_svarint(b *testing.B) { 38 b.Run("short", func(b *testing.B) { 39 benchEncoderSvarint(b, int64(1)) 40 }) 41 b.Run("medium", func(b *testing.B) { 42 benchEncoderSvarint(b, int64(114514)) 43 }) 44 b.Run("large", func(b *testing.B) { 45 benchEncoderSvarint(b, math.MaxInt64) 46 }) 47 } 48 49 func TestDynamicMessage_Encode(t *testing.T) { 50 input := DynamicMessage{ 51 1: 2, 52 3: 4, 53 } 54 got := input.Encode() 55 expected := []byte{1 << 3, 2, 3 << 3, 4} 56 if !bytes.Equal(got, expected) { 57 t.Fatalf("expected %v but got %v", expected, got) 58 } 59 }