mirror of
https://github.com/buger/goreplay.git
synced 2024-04-21 12:32:02 +00:00
The focus here was to **reduce allocation in TCP parser** but speed may have hopeful improved too! pool no longer use map's key of **string** it uses **uint64** **Benchmarks** was revamped to be more clear if you want to compare these results copy the benchmark in tcp/bench_test.go@reduce-allocation to tcp/bench_test.go@master: **before(master)**: ``` BenchmarkPacketParseAndSort-4 1000000 1006 ns/op 64 B/op 2 allocs/op BenchmarkMessageParserWithoutHint-4 625 1772309 ns/op 1000 packets/op 419096 B/op 10045 allocs/op BenchmarkMessageParserWithHint-4 74 14969926 ns/op 1000 chunks/op 1002 packets/op 450992 B/op 10126 allocs/op ``` **After(this branch)**: ``` BenchmarkPacketParseAndSort-4 1267662 941 ns/op 64 B/op 2 allocs/op BenchmarkMessageParserWithoutHint-4 2256 523474 ns/op 1000 packets/op 243530 B/op 1037 allocs/op BenchmarkMessageParserWithHint-4 80 13990955 ns/op 1000 chunks/op 1002 packets/op 268609 B/op 1099 allocs/op ```
42 lines
1012 B
Go
42 lines
1012 B
Go
package byteutils
|
|
|
|
import (
|
|
"bytes"
|
|
"testing"
|
|
)
|
|
|
|
func TestCut(t *testing.T) {
|
|
if !bytes.Equal(Cut([]byte("123456"), 2, 4), []byte("1256")) {
|
|
t.Error("Should properly cut")
|
|
}
|
|
}
|
|
|
|
func TestInsert(t *testing.T) {
|
|
if !bytes.Equal(Insert([]byte("123456"), 2, []byte("abcd")), []byte("12abcd3456")) {
|
|
t.Error("Should insert into middle of slice")
|
|
}
|
|
}
|
|
|
|
func TestReplace(t *testing.T) {
|
|
if !bytes.Equal(Replace([]byte("123456"), 2, 4, []byte("ab")), []byte("12ab56")) {
|
|
t.Error("Should replace when same length")
|
|
}
|
|
|
|
if !bytes.Equal(Replace([]byte("123456"), 2, 4, []byte("abcd")), []byte("12abcd56")) {
|
|
t.Error("Should replace when replacement length bigger")
|
|
}
|
|
|
|
if !bytes.Equal(Replace([]byte("123456"), 2, 5, []byte("ab")), []byte("12ab6")) {
|
|
t.Error("Should replace when replacement length bigger")
|
|
}
|
|
}
|
|
|
|
func BenchmarkStringtoSlice(b *testing.B) {
|
|
var s string
|
|
var buf [1 << 20]byte
|
|
for i := 0; i < b.N; i++ {
|
|
s = SliceToString(buf[:])
|
|
}
|
|
_ = s // avoid gc to optimize away the loop body
|
|
}
|