1
0
mirror of https://github.com/Mrs4s/MiraiGo.git synced 2025-05-05 03:23:50 +08:00
MiraiGo/binary/jce/reader_test.go
wdvxdr 53ac47950c
jce: optimize readByte.
name                            old time/op    new time/op    delta
JceReader_ReadSlice-8              271µs ± 2%     228µs ± 7%  -15.97%  (p=0.000 n=9+10)
RequestDataVersion2_ReadFrom-8    4.57µs ± 6%    4.08µs ± 2%  -10.74%  (p=0.000 n=10+10)

name                            old speed      new speed      delta
JceReader_ReadSlice-8           77.6MB/s ± 2%  92.5MB/s ± 7%  +19.14%  (p=0.000 n=9+10)
RequestDataVersion2_ReadFrom-8  20.4MB/s ± 6%  22.8MB/s ± 2%  +11.92%  (p=0.000 n=10+10)

name                            old alloc/op   new alloc/op   delta
JceReader_ReadSlice-8             73.4kB ± 0%    65.3kB ± 0%  -10.96%  (p=0.000 n=9+6)
RequestDataVersion2_ReadFrom-8    2.64kB ± 0%    2.59kB ± 0%   -1.93%  (p=0.000 n=10+10)

name                            old allocs/op  new allocs/op  delta
JceReader_ReadSlice-8              6.02k ± 0%     3.01k ± 0%  -49.96%  (p=0.000 n=10+10)
RequestDataVersion2_ReadFrom-8      67.0 ± 0%      46.0 ± 0%  -31.34%  (p=0.000 n=10+10)
2021-08-17 16:32:16 +08:00

96 lines
1.7 KiB
Go

package jce
import (
"math/rand"
"testing"
"github.com/stretchr/testify/assert"
)
func TestJceReader_ReadSlice(t *testing.T) {
s := make([]int64, 50)
for i := range s {
s[i] = rand.Int63()
}
w := NewJceWriter()
w.WriteObject(s, 1)
r := NewJceReader(w.Bytes())
var result []int64
r.ReadSlice(&result, 1)
assert.Equal(t, s, result)
}
var test []*BigDataIPInfo
func BenchmarkJceReader_ReadSlice(b *testing.B) {
for i := 0; i <= 500; i++ {
test = append(test, &BigDataIPInfo{
Type: 1,
Server: "test1",
Port: 8080,
})
}
w := NewJceWriter()
w.WriteObject(test, 1)
src := w.Bytes()
b.SetBytes(int64(len(src)))
b.StartTimer()
result := make([]BigDataIPInfo, 0)
for i := 0; i < b.N; i++ {
r := NewJceReader(src)
r.ReadSlice(&result, 1)
}
}
var req = RequestDataVersion2{
Map: map[string]map[string][]byte{
"1": {
"123": []byte(`123`),
},
"2": {
"123": []byte(`123`),
},
"3": {
"123": []byte(`123`),
},
"4": {
"123": []byte(`123`),
},
"5": {
"123": []byte(`123`),
},
}}
func TestRequestDataVersion2_ReadFrom(t *testing.T) {
// todo(wdv): fuzz test
w := NewJceWriter()
w.WriteObject(req.Map, 0)
src := w.Bytes()
result := RequestDataVersion2{}
result.ReadFrom(NewJceReader(src))
assert.Equal(t, req, result)
}
func BenchmarkRequestDataVersion2_ReadFrom(b *testing.B) {
w := NewJceWriter()
w.WriteObject(req.Map, 0)
src := w.Bytes()
b.SetBytes(int64(len(src)))
result := &RequestDataVersion2{}
for i := 0; i < b.N; i++ {
result.ReadFrom(NewJceReader(src))
}
}
func TestJceReader_ReadBytes(t *testing.T) {
b := make([]byte, 1024)
rand.Read(b)
w := NewJceWriter()
w.WriteBytes(b, 0)
r := NewJceReader(w.Bytes())
rb := r.ReadBytes(0)
assert.Equal(t, b, rb)
}