74 lines
1.7 KiB
Go
74 lines
1.7 KiB
Go
package unstable
|
|
|
|
import (
|
|
"bytes"
|
|
"testing"
|
|
)
|
|
|
|
var (
|
|
valid10ASCII = []byte("1234567890")
|
|
valid10Utf8 = []byte("日本語a")
|
|
valid1kUtf8 = bytes.Repeat([]byte("0123456789日本語日本語日本語日abcdefghijklmnopqrstuvwx"), 16)
|
|
valid1MUtf8 = bytes.Repeat(valid1kUtf8, 1024)
|
|
valid1kASCII = bytes.Repeat([]byte("012345678998jhjklasDJKLAAdjdfjsdklfjdslkabcdefghijklmnopqrstuvwx"), 16)
|
|
valid1MASCII = bytes.Repeat(valid1kASCII, 1024)
|
|
)
|
|
|
|
func BenchmarkScanComments(b *testing.B) {
|
|
wrap := func(x []byte) []byte {
|
|
return []byte("# " + string(x) + "\n")
|
|
}
|
|
|
|
inputs := map[string][]byte{
|
|
"10Valid": wrap(valid10ASCII),
|
|
"1kValid": wrap(valid1kASCII),
|
|
"1MValid": wrap(valid1MASCII),
|
|
"10ValidUtf8": wrap(valid10Utf8),
|
|
"1kValidUtf8": wrap(valid1kUtf8),
|
|
"1MValidUtf8": wrap(valid1MUtf8),
|
|
}
|
|
|
|
for name, input := range inputs {
|
|
b.Run(name, func(b *testing.B) {
|
|
b.SetBytes(int64(len(input)))
|
|
b.ReportAllocs()
|
|
b.ResetTimer()
|
|
|
|
for i := 0; i < b.N; i++ {
|
|
_, _, _ = scanComment(input)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func BenchmarkParseLiteralStringValid(b *testing.B) {
|
|
wrap := func(x []byte) []byte {
|
|
return []byte("'" + string(x) + "'")
|
|
}
|
|
|
|
inputs := map[string][]byte{
|
|
"10Valid": wrap(valid10ASCII),
|
|
"1kValid": wrap(valid1kASCII),
|
|
"1MValid": wrap(valid1MASCII),
|
|
"10ValidUtf8": wrap(valid10Utf8),
|
|
"1kValidUtf8": wrap(valid1kUtf8),
|
|
"1MValidUtf8": wrap(valid1MUtf8),
|
|
}
|
|
|
|
for name, input := range inputs {
|
|
b.Run(name, func(b *testing.B) {
|
|
p := Parser{}
|
|
b.SetBytes(int64(len(input)))
|
|
b.ReportAllocs()
|
|
b.ResetTimer()
|
|
|
|
for i := 0; i < b.N; i++ {
|
|
_, _, _, err := p.parseLiteralString(input)
|
|
if err != nil {
|
|
b.Error(err)
|
|
}
|
|
}
|
|
})
|
|
}
|
|
}
|