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