summaryrefslogtreecommitdiffstats
path: root/tests/015/split.tl
blob: 1cb13647b671740345d379d3d84096f00cb58717 (plain)
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
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
(load "../common")

(mtest
  (split-str "" "") ("")
  (split-str "a" "") ("a")
  (split-str "" "a") ("")
  (split-str "a" "a") ("" ""))

(mtest
  (split-str "" "" t) ("")
  (split-str "a" "" t) ("a")
  (split-str "" "a" t) ("")
  (split-str "a" "a" t) ("" "a" ""))

(mtest
  (split-str "" #//) ("")
  (split-str "a" #//) ("a")
  (split-str "" #/a/) ("")
  (split-str "a" #/a/) ("" ""))

(mtest
  (split-str "" #// t) ("")
  (split-str "a" #// t) ("a")
  (split-str "" #/a/ t) ("")
  (split-str "a" #/a/ t) ("" "a" ""))

(mtest
  (split-str "ab" "") ("a" "b")
  (split-str "ab" "a") ("" "b")
  (split-str "ab" "b") ("a" "")
  (split-str "ab" "ab") ("" "")
  (split-str "ab" "abc") ("ab"))

(mtest
  (split-str "ab" "" t) ("a" "" "b")
  (split-str "ab" "a" t) ("" "a" "b")
  (split-str "ab" "b" t) ("a" "b" "")
  (split-str "ab" "ab" t) ("" "ab" "")
  (split-str "ab" "abc" t) ("ab"))

(mtest
  (split-str "ab" #//) ("a" "b")
  (split-str "ab" #/a/) ("" "b")
  (split-str "ab" #/b/) ("a" "")
  (split-str "ab" #/ab/) ("" "")
  (split-str "ab" #/abc/) ("ab"))

(mtest
  (split-str "ab" #// t) ("a" "" "b")
  (split-str "ab" #/a/ t) ("" "a" "b")
  (split-str "ab" #/b/ t) ("a" "b" "")
  (split-str "ab" #/ab/ t) ("" "ab" "")
  (split-str "ab" #/abc/ t) ("ab"))

(mtest
  (split-str "abc" "") ("a" "b" "c")
  (split-str "abc" "" t) ("a" "" "b" "" "c")
  (split-str "abc" #//) ("a" "b" "c")
  (split-str "abc" #// t) ("a" "" "b" "" "c"))

(mtest
  (split-str "abc" "a") ("" "bc")
  (split-str "abc" "b") ("a" "c")
  (split-str "abc" "c") ("ab" "")
  (split-str "abc" "a" t) ("" "a" "bc")
  (split-str "abc" "b" t) ("a" "b" "c")
  (split-str "abc" "c" t) ("ab" "c" "")
  (split-str "abc" #/a/) ("" "bc")
  (split-str "abc" #/b/) ("a" "c")
  (split-str "abc" #/c/) ("ab" "")
  (split-str "abc" #/a/ t) ("" "a" "bc")
  (split-str "abc" #/b/ t) ("a" "b" "c")
  (split-str "abc" #/c/ t) ("ab" "c" ""))

(mtest
  (split-str "abc" "ab") ("" "c")
  (split-str "abc" "bc") ("a" "")
  (split-str "abc" "abc") ("" "")
  (split-str "abc" "ab" t) ("" "ab" "c")
  (split-str "abc" "bc" t) ("a" "bc" "")
  (split-str "abc" "abc" t) ("" "abc" "")
  (split-str "abc" #/ab/) ("" "c")
  (split-str "abc" #/bc/) ("a" "")
  (split-str "abc" #/abc/) ("" "")
  (split-str "abc" #/ab/ t) ("" "ab" "c")
  (split-str "abc" #/bc/ t) ("a" "bc" "")
  (split-str "abc" #/abc/ t) ("" "abc" ""))

(mtest
  (split-str "a,b,c" ",") ("a" "b" "c")
  (split-str ",b,c" ",") ("" "b" "c")
  (split-str "a,,c" ",") ("a" "" "c")
  (split-str "a,b," ",") ("a" "b" "")
  (split-str ",,c" ",") ("" "" "c")
  (split-str "a,," ",") ("a" "" "")
  (split-str ",," ",") ("" "" ""))

(mtest
  (split-str "a,b,c" #/,/ t) ("a" "," "b" "," "c")
  (split-str ",b,c" #/,/ t) ("" "," "b" "," "c")
  (split-str "a,,c" #/,/ t) ("a" "," "" "," "c")
  (split-str "a,b," #/,/ t) ("a" "," "b" "," "")
  (split-str ",,c" #/,/ t) ("" "," "" "," "c")
  (split-str "a,," #/,/ t) ("a" "," "" "," "")
  (split-str ",," #/,/ t) ("" "," "" "," ""))

(mtest
  (split-str "a,b,c" #/[^,]/) ("" "," "," "")
  (split-str "a,b,c" #/[^,]/ t) ("" "a" "," "b" "," "c" "")
  (split-str "a,b,c" #/[^a-c]/) #"a b c"
  (split-str "a,b,c" #/[^a-c]/ t) #"a , b , c")

(mtest
  (split-str "abc" #/./) ("" "" "" "")
  (split-str "abc" #/./ t) ("" "a" "" "b" "" "c" "")
  (split-str "abc" #/../) ("" "c")
  (split-str "abc" #/../ t) ("" "ab" "c")
  (split-str "abc" #/.../) ("" "")
  (split-str "abc" #/.../ t) ("" "abc" ""))

(mtest
  (split-str "abcacabcac" #/ab?/) ("" "c" "c" "c" "c")
  (split-str "abcacabcac" #/ab?/ t) ("" "ab" "c" "a" "c" "ab" "c" "a" "c"))

(mtest
  (tok-str "" #//) ("")
  (tok-str "a" #//) ("" "")
  (tok-str "" #/a/) nil
  (tok-str "a" #/a/) ("a"))

(mtest
  (tok-str "" #// t) ("" "" "")
  (tok-str "a" #// t) ("" "" "a" "" "")
  (tok-str "" #/a/ t) ("")
  (tok-str "a" #/a/ t) ("" "a" ""))

(mtest
  (tok-str "ab" #//) ("" "" "")
  (tok-str "ab" #/a/) ("a")
  (tok-str "ab" #/b/) ("b")
  (tok-str "ab" #/ab/) ("ab")
  (tok-str "ab" #/abc/) nil)

(mtest
  (tok-str "ab" #// t) ("" "" "a" "" "b" "" "")
  (tok-str "ab" #/a/ t) ("" "a" "b")
  (tok-str "ab" #/b/ t) ("a" "b" "")
  (tok-str "ab" #/ab/ t) ("" "ab" "")
  (tok-str "ab" #/abc/ t) ("ab"))

(mtest
  (tok-str "abc" #//) ("" "" "" "")
  (tok-str "abc" #// t) ("" "" "a" "" "b" "" "c" "" ""))

(mtest
  (tok-str "abc" #/a/) ("a")
  (tok-str "abc" #/b/) ("b")
  (tok-str "abc" #/c/) ("c")
  (tok-str "abc" #/a/ t) ("" "a" "bc")
  (tok-str "abc" #/b/ t) ("a" "b" "c")
  (tok-str "abc" #/c/ t) ("ab" "c" ""))

(mtest
  (tok-str "abc" #/ab/) ("ab")
  (tok-str "abc" #/bc/) ("bc")
  (tok-str "abc" #/abc/) ("abc")
  (tok-str "abc" #/ab/ t) ("" "ab" "c")
  (tok-str "abc" #/bc/ t) ("a" "bc" "")
  (tok-str "abc" #/abc/ t) ("" "abc" ""))

(mtest
  (tok-str "a,b,c" #/,/ t) ("a" "," "b" "," "c")
  (tok-str ",b,c" #/,/ t) ("" "," "b" "," "c")
  (tok-str "a,,c" #/,/ t) ("a" "," "" "," "c")
  (tok-str "a,b," #/,/ t) ("a" "," "b" "," "")
  (tok-str ",,c" #/,/ t) ("" "," "" "," "c")
  (tok-str "a,," #/,/ t) ("a" "," "" "," "")
  (tok-str ",," #/,/ t) ("" "," "" "," ""))

(mtest
  (tok-str "a,b,c" #/[^,]/) #"a b c"
  (tok-str "a,b,c" #/[^,]/ t) ("" "a" "," "b" "," "c" "")
  (tok-str "a,b,c" #/[^a-c]/) #", ,"
  (tok-str "a,b,c" #/[^a-c]/ t) #"a , b , c")

(mtest
  (tok-str "abc" #/./) #"a b c"
  (tok-str "abc" #/./ t) ("" "a" "" "b" "" "c" "")
  (tok-str "abc" #/../) #"ab"
  (tok-str "abc" #/../ t) ("" "ab" "c")
  (tok-str "abc" #/.../) #"abc"
  (tok-str "abc" #/.../ t) ("" "abc" ""))

(mtest
  (tok-str "abcacabcac" #/ab?/) #"ab a ab a"
  (tok-str "abcacabcac" #/ab?/ t) ("" "ab" "c" "a" "c" "ab" "c" "a" "c"))

(mtest
  (tok-str "" #/[^,]/ : 0) ()
  (tok-str "a,b,c" #/[^,]/ : 0) ("a,b,c")
  (tok-str "a,b,c" #/[^,]/ : 1) ("a" ",b,c")
  (tok-str "a,b,c" #/[^,]/ : 2) ("a" "b" ",c")
  (tok-str "a,b,c" #/[^,]/ : 3) #"a b c"
  (tok-str "a,b,c" #/[^,]/ : 4) #"a b c")

(mtest
  (tok-str "a,b,c" #/[^,]/ t 0) ("a,b,c")
  (tok-str "a,b,c" #/[^,]/ t 1) ("" "a" ",b,c")
  (tok-str "a,b,c" #/[^,]/ t 2) ("" "a" "," "b" ",c")
  (tok-str "a,b,c" #/[^,]/ t 3) ("" "a" "," "b" "," "c" "")
  (tok-str "a,b,c" #/[^,]/ t 4) ("" "a" "," "b" "," "c" ""))

(mtest
  (tok #/[^,]/ "a,b,c") #"a b c"
  (tokn : #/[^,]/ "a,b,c") :error
  (tokn nil #/[^,]/ "a,b,c") :error
  (tokn 0 #/[^,]/ "a,b,c") ("a,b,c")
  (tokn 1 #/[^,]/ "a,b,c") ("a" ",b,c")
  (tokn 2 #/[^,]/ "a,b,c") ("a" "b" ",c")
  (tokn 3 #/[^,]/ "a,b,c") ("a" "b" "c")
  (tokn 4 #/[^,]/ "a,b,c") ("a" "b" "c"))

(mtest
  (tokn 0 #/[^,]/ t "a,b,c") ("a,b,c")
  (tokn 1 #/[^,]/ t "a,b,c") ("" "a" ",b,c")
  (tokn 2 #/[^,]/ t "a,b,c") ("" "a" "," "b" ",c")
  (tokn 3 #/[^,]/ t "a,b,c") ("" "a" "," "b" "," "c" "")
  (tokn 4 #/[^,]/ t "a,b,c") ("" "a" "," "b" "," "c" ""))

(mtest
  (join) ""
  (join "") ""
  (join "" "") ""
  (join #\a) "a"
  (join "a") "a"
  (join #\a "b") "ab"
  (join "a" #\b) "ab"
  (join #\a #\b) "ab"
  (join "a" "b") "ab"
  (join "a" "b" "cde") "abcde")

(mtest
  (join-with #\a) ""
  (join-with #\a #\b) "b"
  (join-with #\a "b") "b"
  (join-with "a") ""
  (join-with "a" #\b) "b"
  (join-with "a" "b") "b"
  (join-with "a" "b") "b"
  (join-with "--" "b" "c" "d") "b--c--d"
  (join-with #\- "b" "c" "d") "b-c-d")

(mtest
  (split-str "abc" "" : 0) ("abc")
  (split-str "abc" "" : 1) ("a" "bc")
  (split-str "abc" "" : 2) ("a" "b" "c")
  (split-str "abc" "" : 3) ("a" "b" "c")
  (split-str "abc" "" : -1) :error)

(mtest
  (split-str "abc" "" t 0) ("abc")
  (split-str "abc" "" t 1) ("a" "" "bc")
  (split-str "abc" "" t 2) ("a" "" "b" "" "c")
  (split-str "abc" "" t 3) ("a" "" "b" "" "c"))

(mtest
  (split-str "a,b,c" "," : 0) ("a,b,c")
  (split-str "a,b,c" "," : 1) ("a" "b,c")
  (split-str "a,b,c" "," : 2) ("a" "b" "c")
  (split-str "a,b,c" "," : 3) ("a" "b" "c"))

(mtest
  (split-str "a,b,c" "," t 0) ("a,b,c")
  (split-str "a,b,c" "," t 1) ("a" "," "b,c")
  (split-str "a,b,c" "," t 2) ("a" "," "b" "," "c")
  (split-str "a,b,c" "," t 3) ("a" "," "b" "," "c"))

(mtest
  (split-str "a12b34c567d" #/[0-9]+/ : 0) ("a12b34c567d")
  (split-str "a12b34c567d" #/[0-9]+/ : 1) ("a" "b34c567d")
  (split-str "a12b34c567d" #/[0-9]+/ : 2) ("a" "b" "c567d")
  (split-str "a12b34c567d" #/[0-9]+/ : 3) ("a" "b" "c" "d")
  (split-str "a12b34c567d" #/[0-9]+/ : 4) ("a" "b" "c" "d"))

(mtest
  (split-str "a12b34c567d" #/[0-9]+/ t 0) ("a12b34c567d")
  (split-str "a12b34c567d" #/[0-9]+/ t 1) ("a" "12" "b34c567d")
  (split-str "a12b34c567d" #/[0-9]+/ t 2) ("a" "12" "b" "34" "c567d")
  (split-str "a12b34c567d" #/[0-9]+/ t 3) ("a" "12" "b" "34" "c" "567" "d")
  (split-str "a12b34c567d" #/[0-9]+/ t 4) ("a" "12" "b" "34" "c" "567" "d"))

(mtest
  (spl "," "a,b,c") #"a b c"
  (spln : "," "a,b,c") :error
  (spln nil "," "a,b,c") :error
  (spln 0 "," "a,b,c") ("a,b,c")
  (spln 1 "," "a,b,c") ("a" "b,c")
  (spln 2 "," "a,b,c") ("a" "b" "c")
  (spln 3 "," "a,b,c") ("a" "b" "c")
  (spln 4 "," "a,b,c") ("a" "b" "c"))

(mtest
  (cat-str '()) ""
  (cat-str '() "-") ""
  (cat-str '(()) "-") ""
  (cat-str '((()) ()) "-") ""
  (cat-str '((()) #()) "-") ""
  (cat-str '((("a" ("b")) #(#\c))) "-") "a-b-c")

(mtest
  (join-with "--" '()) ""
  (join-with "--" '(("b"))) "b"
  (join-with "--" '("b" #(("c") ()) "d")) "b--c--d")