@@ -6,50 +6,48 @@ import (
6
6
"testing"
7
7
8
8
"github.com/stretchr/testify/assert"
9
-
10
- "github.com/jf-tech/go-corelib/strs"
11
9
)
12
10
13
11
func TestNewScannerByDelim (t * testing.T ) {
14
12
for _ , test := range []struct {
15
13
name string
16
14
input io.Reader
17
- delim string
15
+ delim [] byte
18
16
flags ScannerByDelimFlag
19
17
expectedTokens []string
20
18
}{
21
19
{
22
20
name : "multi-char delim | eof as delim | drop delim" ,
23
21
input : strings .NewReader ("abc#123##efg####???##xyz##" ),
24
- delim : "##" ,
22
+ delim : [] byte ( "##" ) ,
25
23
flags : ScannerByDelimFlagEofAsDelim | ScannerByDelimFlagDropDelimInReturn ,
26
24
expectedTokens : []string {"abc#123" , "efg" , "" , "???" , "xyz" },
27
25
},
28
26
{
29
27
name : "CR LF delim | eof as delim | include delim" ,
30
28
input : strings .NewReader ("\r \n \r abc\r " ),
31
- delim : "\r \n " ,
29
+ delim : [] byte ( "\r \n " ) ,
32
30
flags : ScannerByDelimFlagEofAsDelim | ScannerByDelimFlagIncludeDelimInReturn ,
33
31
expectedTokens : []string {"\r \n " , "\r abc\r " },
34
32
},
35
33
{
36
34
name : "empty reader" ,
37
35
input : strings .NewReader ("" ),
38
- delim : "*" ,
36
+ delim : [] byte ( "*" ) ,
39
37
flags : ScannerByDelimFlagDefault ,
40
38
expectedTokens : []string {},
41
39
},
42
40
{
43
41
name : "empty token" ,
44
42
input : strings .NewReader ("*" ),
45
- delim : "*" ,
43
+ delim : [] byte ( "*" ) ,
46
44
flags : ScannerByDelimFlagEofNotAsDelim | ScannerByDelimFlagDropDelimInReturn ,
47
45
expectedTokens : []string {"" },
48
46
},
49
47
{
50
48
name : "trailing newlines" ,
51
49
input : strings .NewReader ("*\n " ),
52
- delim : "*" ,
50
+ delim : [] byte ( "*" ) ,
53
51
flags : ScannerByDelimFlagEofAsDelim | ScannerByDelimFlagIncludeDelimInReturn ,
54
52
expectedTokens : []string {"*" , "\n " },
55
53
},
@@ -69,8 +67,8 @@ func TestNewScannerByDelim(t *testing.T) {
69
67
func TestNewScannerByDelim2 (t * testing.T ) {
70
68
s := NewScannerByDelim2 (
71
69
strings .NewReader ("abc#123##efg####???##xyz##" ),
72
- "##" ,
73
- strs . RunePtr ( '?' ),
70
+ [] byte ( "##" ) ,
71
+ [] byte ( "?" ),
74
72
ScannerByDelimFlagEofAsDelim | ScannerByDelimFlagDropDelimInReturn )
75
73
var tokens []string
76
74
for s .Scan () {
@@ -84,8 +82,8 @@ func TestNewScannerByDelim3(t *testing.T) {
84
82
buf := make ([]byte , 0 , 100 )
85
83
s := NewScannerByDelim3 (
86
84
strings .NewReader ("abc#123##efg####???##xyz##" ),
87
- "##" ,
88
- strs . RunePtr ( '?' ),
85
+ [] byte ( "##" ) ,
86
+ [] byte ( "?" ),
89
87
ScannerByDelimFlagEofAsDelim | ScannerByDelimFlagDropDelimInReturn ,
90
88
buf )
91
89
var tokens []string
@@ -96,17 +94,16 @@ func TestNewScannerByDelim3(t *testing.T) {
96
94
assert .Equal (t , []string {"abc#123" , "efg" , "" , "???##xyz" }, tokens )
97
95
}
98
96
99
- // Benchmark shows the benefit of using NewScannerByDelim3 with pre-allocated buf.
100
- // BenchmarkNewScannerByDelim2-8 5000 299188 ns/op 2141712 B/op 996 allocs/op
101
- // BenchmarkNewScannerByDelim3-8 30000 48893 ns/op 208 B/op 3 allocs/op
102
-
103
- var benchmarkInput = strings .Repeat ("abc#" , 1000 )
97
+ var benchmarkInput = strings .Repeat ("abc#" , 100000 )
98
+ var benchmarkDelim = []byte ("#" )
99
+ var benchmarkBuf = make ([]byte , 1024 )
104
100
101
+ // BenchmarkNewScannerByDelim2-8 500 2597188 ns/op 4344 B/op 5 allocs/op
105
102
func BenchmarkNewScannerByDelim2 (b * testing.B ) {
106
103
for i := 0 ; i < b .N ; i ++ {
107
104
s := NewScannerByDelim2 (
108
105
strings .NewReader (benchmarkInput ),
109
- "#" ,
106
+ benchmarkDelim ,
110
107
nil ,
111
108
ScannerByDelimFlagEofAsDelim | ScannerByDelimFlagDropDelimInReturn )
112
109
for s .Scan () {
@@ -121,15 +118,15 @@ func BenchmarkNewScannerByDelim2(b *testing.B) {
121
118
}
122
119
}
123
120
121
+ // BenchmarkNewScannerByDelim3-8 500 2585825 ns/op 242 B/op 3 allocs/op
124
122
func BenchmarkNewScannerByDelim3 (b * testing.B ) {
125
- buf := make ([]byte , 0 , 10 )
126
123
for i := 0 ; i < b .N ; i ++ {
127
124
s := NewScannerByDelim3 (
128
125
strings .NewReader (benchmarkInput ),
129
- "#" ,
126
+ benchmarkDelim ,
130
127
nil ,
131
128
ScannerByDelimFlagEofAsDelim | ScannerByDelimFlagDropDelimInReturn ,
132
- buf )
129
+ benchmarkBuf )
133
130
for s .Scan () {
134
131
token := s .Bytes ()
135
132
if len (token ) != 3 || token [0 ] != 'a' || token [1 ] != 'b' || token [2 ] != 'c' {
0 commit comments