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  }