1
0
mirror of https://github.com/Mrs4s/MiraiGo.git synced 2025-05-04 11:07:40 +08:00
MiraiGo/binary/writer_test.go
wdvxdr 207df5fc00
NewWriterF with sync.Pool
多次写入,需要扩容时速度提升
2021-03-23 22:10:12 +08:00

145 lines
2.6 KiB
Go

package binary
import (
"bytes"
"encoding/hex"
"fmt"
"math/rand"
"sync"
"testing"
)
func NewWriterFOld(f func(writer *Writer)) []byte {
w := new(bytes.Buffer)
f((*Writer)(w))
return w.Bytes()
}
func TestNewWriterF(t *testing.T) {
wg := sync.WaitGroup{}
for i := 0; i < 10000; i++ {
wg.Add(1)
go func() {
defer wg.Done()
test := make([]byte, 1024)
rand.Read(test)
b1 := NewWriterFOld(func(writer *Writer) {
writer.Write(test)
writer.Write(NewWriterFOld(func(writer *Writer) {
writer.Write(test)
writer.Write(NewWriterFOld(func(writer *Writer) {
writer.Write(test)
}))
}))
})
b2 := NewWriterF(func(writer *Writer) {
writer.Write(test)
writer.Write(NewWriterF(func(writer *Writer) {
writer.Write(test)
writer.Write(NewWriterF(func(writer *Writer) {
writer.Write(test)
}))
}))
})
if !bytes.Equal(b1, b2) {
fmt.Println(hex.EncodeToString(b1))
fmt.Println(hex.EncodeToString(b2))
t.Error("Not equal!!!")
}
}()
}
wg.Wait()
}
func BenchmarkNewWriterFOld128(b *testing.B) {
test := make([]byte, 128)
rand.Read(test)
b.StartTimer()
b.RunParallel(func(pb *testing.PB) {
for pb.Next() {
NewWriterFOld(func(w *Writer) {
w.Write(test)
})
}
})
}
func BenchmarkNewWriterF128(b *testing.B) {
test := make([]byte, 128)
rand.Read(test)
b.StartTimer()
b.RunParallel(func(pb *testing.PB) {
for pb.Next() {
NewWriterF(func(w *Writer) {
w.Write(test)
})
}
})
}
func BenchmarkNewWriterFOld128_3(b *testing.B) {
test := make([]byte, 128)
rand.Read(test)
b.StartTimer()
b.RunParallel(func(pb *testing.PB) {
for pb.Next() {
NewWriterFOld(func(w *Writer) {
w.Write(test)
w.Write(test)
w.Write(test)
})
}
})
}
func BenchmarkNewWriterF128_3(b *testing.B) {
test := make([]byte, 128)
rand.Read(test)
b.StartTimer()
b.RunParallel(func(pb *testing.PB) {
for pb.Next() {
NewWriterF(func(w *Writer) {
w.Write(test)
w.Write(test)
w.Write(test)
})
}
})
}
func BenchmarkNewWriterFOld128_5(b *testing.B) {
test := make([]byte, 128)
rand.Read(test)
b.StartTimer()
b.RunParallel(func(pb *testing.PB) {
for pb.Next() {
NewWriterFOld(func(w *Writer) {
w.Write(test)
w.Write(test)
w.Write(test)
w.Write(test)
w.Write(test)
})
}
})
}
func BenchmarkNewWriterF128_5(b *testing.B) {
test := make([]byte, 128)
rand.Read(test)
b.StartTimer()
b.RunParallel(func(pb *testing.PB) {
for pb.Next() {
NewWriterF(func(w *Writer) {
w.Write(test)
w.Write(test)
w.Write(test)
w.Write(test)
w.Write(test)
})
}
})
}