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  }