-
Notifications
You must be signed in to change notification settings - Fork 0
/
tests.go
130 lines (118 loc) · 2.42 KB
/
tests.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
package compiler
// Author: Ersi Ni
import (
"strconv"
"testing"
"io/ioutil"
)
func testEqualIntArray(a, b []int) bool {
if a == nil && b == nil {
return true
}
if a == nil || b == nil {
return false
}
if len(a) != len(b) {
return false
}
for i := range a {
if a[i] != b[i] {
return false
}
}
return true
}
func generateFromDataset() []string {
var rst []string
content, err := ioutil.ReadFile("words.test")
if err != nil {
for _, v := range memoryBenchmarkTest {
s := ""
for i := 0; i < 10; i++ {
s += v.Input
}
rst = append(rst, s)
}
return rst
}
l := len(content)
apiece := l / 10
for s := 0; s < l; s += apiece {
offset := s + apiece
if offset < l {
rst = append(rst, string(content[s:offset]))
} else {
rst = append(rst, string(content[s:]))
}
}
return rst
}
func lexLegalWordsTester(t *testing.T) *Lexer {
pointer := &Lexer{
S: NewSymbolTable(),
Tokens: make(chan Token),
State: nil,
StartPosition: 0,
Width: 0,
LastPosition: 0,
CurrentPosition: 0,
In: "",
}
if pointer == nil {
t.Errorf("built a nil barebone lexer\n")
}
return pointer
}
func (l *Lexer) injectInput(in string) {
l.In = in
}
func (l *Lexer) legalRun(t *testing.T, keywords []string) []int {
concat := ""
for _, k := range keywords {
concat += k + " "
}
l.injectInput(concat)
if l.In != concat {
t.Errorf("inject failed, got %v\n", l.In)
}
go l.Run()
var rst []int
for {
token := l.ConsumeToken()
if token.T == TokenError {
break
}
i, e := strconv.ParseInt(token.V, 10, 0)
if e != nil {
t.Errorf("not a int, %v\n", token)
}
rst = append(rst, int(i))
}
return rst
}
func collect(input string) (rst []Token) {
l := NewLexer(input)
for {
token := l.ConsumeToken()
if token.T == TokenError && token.V == "" {
l.Flush()
break
}
rst = append(rst, token)
}
return
}
const input1 = `this little piggy`
const input2 = `what has happened`
const input3 = `in Private say one thing in Public say another`
const input4 = `when speaking Privately to (12 or more) be discreet`
const input5 = `there are "strings of things" and there are "chickens
with
wings"
`
const input6 = `over and over and over again`
const input7 = `888 is quite ok but 88888 is "not ok"`
const input8 = `PublicAndPrivateShouldNotBeConfused`
const input9 = `when can ~ appear in a string? "Here An~d~ Th~~~~~~ere"
but "some string
`