1
0
mirror of https://github.com/Mrs4s/MiraiGo.git synced 2025-05-05 03:23:50 +08:00
MiraiGo/binary/protobuf_test.go
wdvxdr 21ff14fd5c
optimize(binary): allow inline (*encoder).svarint
name                       old time/op  new time/op  delta
encoder_svarint/short-8   7.12ns ± 2%  6.24ns ± 2%  -12.36%  (p=0.000 n=10+9)
encoder_svarint/medium-8  8.86ns ± 3%  7.82ns ± 2%  -11.76%  (p=0.000 n=10+10)
encoder_svarint/large-8   12.2ns ± 1%  11.4ns ± 2%   -5.99%  (p=0.000 n=10+10)

BTW, (*encoder).u32 and (*encoder).u64 can be inlined with go1.18
2021-11-07 13:56:40 +08:00

47 lines
882 B
Go

package binary
import (
"math"
"testing"
)
func benchEncoderUvarint(b *testing.B, v uint64) {
e := encoder{}
for i := 0; i < b.N; i++ {
e.Reset()
e.uvarint(v)
}
}
func benchEncoderSvarint(b *testing.B, v int64) {
e := encoder{}
for i := 0; i < b.N; i++ {
e.Reset()
e.svarint(v)
}
}
func Benchmark_encoder_uvarint(b *testing.B) {
b.Run("short", func(b *testing.B) {
benchEncoderUvarint(b, uint64(1))
})
b.Run("medium", func(b *testing.B) {
benchEncoderUvarint(b, uint64(114514))
})
b.Run("large", func(b *testing.B) {
benchEncoderUvarint(b, math.MaxUint64)
})
}
func Benchmark_encoder_svarint(b *testing.B) {
b.Run("short", func(b *testing.B) {
benchEncoderSvarint(b, int64(1))
})
b.Run("medium", func(b *testing.B) {
benchEncoderSvarint(b, int64(114514))
})
b.Run("large", func(b *testing.B) {
benchEncoderSvarint(b, math.MaxInt64)
})
}