...
1 package unstable
2
3 import (
4 "bytes"
5 "testing"
6 )
7
8 var valid10Ascii = []byte("1234567890")
9 var valid10Utf8 = []byte("日本語a")
10 var valid1kUtf8 = bytes.Repeat([]byte("0123456789日本語日本語日本語日abcdefghijklmnopqrstuvwx"), 16)
11 var valid1MUtf8 = bytes.Repeat(valid1kUtf8, 1024)
12 var valid1kAscii = bytes.Repeat([]byte("012345678998jhjklasDJKLAAdjdfjsdklfjdslkabcdefghijklmnopqrstuvwx"), 16)
13 var valid1MAscii = bytes.Repeat(valid1kAscii, 1024)
14
15 func BenchmarkScanComments(b *testing.B) {
16 wrap := func(x []byte) []byte {
17 return []byte("# " + string(x) + "\n")
18 }
19
20 inputs := map[string][]byte{
21 "10Valid": wrap(valid10Ascii),
22 "1kValid": wrap(valid1kAscii),
23 "1MValid": wrap(valid1MAscii),
24 "10ValidUtf8": wrap(valid10Utf8),
25 "1kValidUtf8": wrap(valid1kUtf8),
26 "1MValidUtf8": wrap(valid1MUtf8),
27 }
28
29 for name, input := range inputs {
30 b.Run(name, func(b *testing.B) {
31 b.SetBytes(int64(len(input)))
32 b.ReportAllocs()
33 b.ResetTimer()
34
35 for i := 0; i < b.N; i++ {
36 scanComment(input)
37 }
38 })
39 }
40 }
41
42 func BenchmarkParseLiteralStringValid(b *testing.B) {
43 wrap := func(x []byte) []byte {
44 return []byte("'" + string(x) + "'")
45 }
46
47 inputs := map[string][]byte{
48 "10Valid": wrap(valid10Ascii),
49 "1kValid": wrap(valid1kAscii),
50 "1MValid": wrap(valid1MAscii),
51 "10ValidUtf8": wrap(valid10Utf8),
52 "1kValidUtf8": wrap(valid1kUtf8),
53 "1MValidUtf8": wrap(valid1MUtf8),
54 }
55
56 for name, input := range inputs {
57 b.Run(name, func(b *testing.B) {
58 p := Parser{}
59 b.SetBytes(int64(len(input)))
60 b.ReportAllocs()
61 b.ResetTimer()
62
63 for i := 0; i < b.N; i++ {
64 _, _, _, err := p.parseLiteralString(input)
65 if err != nil {
66 panic(err)
67 }
68 }
69 })
70 }
71 }
72
View as plain text