]> gitweb.factorcode.org Git - factor.git/blob - extra/sequences/extras/extras-tests.factor
Fixes #2966
[factor.git] / extra / sequences / extras / extras-tests.factor
1 USING: accessors arrays ascii grouping io io.streams.string
2 kernel make math prettyprint ranges sequences sequences.extras
3 strings tools.test ;
4
5 { V{ { 0 104 } { 2 108 } { 3 108 } } } [ "hello" [ even? ] find-all ] unit-test
6
7 { { "a" "b" "c" "d" "ab" "bc" "cd" "abc" "bcd" "abcd" } } [ "abcd" all-subseqs ] unit-test
8
9 { { "a" "ab" "abc" "abcd" "b" "bc" "bcd" "c" "cd" "d" } }
10 [ [ "abcd" [ , ] each-subseq ] { } make ] unit-test
11
12 { B{ 115 } } [ 1 2 "asdf" B{ } subseq-as ] unit-test
13
14 { "" } [ "abc" "def" longest-subseq ] unit-test
15 { "abcd" } [ "abcd" "abcde" longest-subseq ] unit-test
16 { "foo" } [ "foo" "foobar" longest-subseq ] unit-test
17 { "foo" } [ "foobar" "foo" longest-subseq ] unit-test
18
19 { "" "" } [ "" "" CHAR: ? pad-longest ] unit-test
20 { "abc" "def" } [ "abc" "def" CHAR: ? pad-longest ] unit-test
21 { "   " "abc" } [ "" "abc" CHAR: \s pad-longest ] unit-test
22 { "abc" "   " } [ "abc" "" CHAR: \s pad-longest ] unit-test
23 { "abc..." "foobar" } [ "abc" "foobar" CHAR: . pad-longest ] unit-test
24
25 {
26     {
27         "ABC"
28         "ABC"
29         "ABC"
30         "ABC"
31         "ABC-"
32         "-ABC-"
33         "-ABC--"
34         "--ABC--"
35     }
36 } [
37     "ABC" 8 <iota> [ CHAR: - pad-center ] with map
38 ] unit-test
39
40 { { 0 1 0 1 } } [
41     { 0 0 0 0 } { 1 3 } over [ 1 + ] change-nths
42 ] unit-test
43
44 { V{ f t f } } [
45     { 1 2 3 } [ even? ] selector* [ each ] dip
46 ] unit-test
47
48 { { 1 3 5 } } [ { 1 2 3 4 5 6 } [ nip even? ] filter-index ] unit-test
49
50 { V{ 1 3 5 } } [ { 1 2 3 4 5 6 } [ nip even? ] V{ } filter-index-as ] unit-test
51
52 { { 1 3 5 } } [ { 1 2 3 4 5 6 } even-indices ] unit-test
53
54 { { 2 4 6 } } [ { 1 2 3 4 5 6 } odd-indices ] unit-test
55
56 { "a b c d e" }
57 [ "a      b  \t \n \r  c   d \n    e   " [ ascii:blank? ] " " compact ] unit-test
58
59 { " a b c d e " }
60 [ " a      b  c   d    e   " [ ascii:blank? ] " " collapse ] unit-test
61
62 { { "hello," " " "world!" " " " " } }
63 [ "hello, world!  " [ ascii:blank? ] slice-when [ >string ] map ] unit-test
64
65 { t }
66 [ "abc" sequence>slice slice? ] unit-test
67
68 { "abc" }
69 [ "abc" sequence>slice >string ] unit-test
70
71 { t } [ "abcdef" [ 0 3 rot <slice> ] [ 2 4 rot <slice> ] bi slices-overlap? ] unit-test
72 { t } [ "abcdef" [ 0 3 rot <slice> ] [ 1 2 rot <slice> ] bi slices-overlap? ] unit-test
73 { f } [ "abcdef" [ 0 3 rot <slice> ] [ 3 6 rot <slice> ] bi slices-overlap? ] unit-test
74 { t } [ "abcdef" [ 0 3 rot <slice> ] [ 2 4 rot <slice> ] bi slices-touch? ] unit-test
75 { t } [ "abcdef" [ 0 3 rot <slice> ] [ 1 2 rot <slice> ] bi slices-touch? ] unit-test
76 { t } [ "abcdef" [ 0 3 rot <slice> ] [ 3 6 rot <slice> ] bi slices-touch? ] unit-test
77 { f } [ "abcdef" [ 0 3 rot <slice> ] [ 4 6 rot <slice> ] bi slices-touch? ] unit-test
78
79 { "abcdef" } [
80     "abcdef" [ 0 3 rot <slice> ] [ 3 6 rot <slice> ] bi merge-slices >string
81 ] unit-test
82
83 { "abcdef" } [
84     "abcdef" [ 3 6 rot <slice> ] [ 0 3 rot <slice> ] bi merge-slices >string
85 ] unit-test
86
87 { "abc" } [
88     "abcdef" [ 0 3 rot <slice> ] [ 0 3 rot <slice> ] bi merge-slices >string
89 ] unit-test
90
91
92 { "hello" "hello" } [ "hello" dup 0 rotate ] unit-test
93 { "hello" "llohe" } [ "hello" dup 2 rotate ] unit-test
94 { "hello" "lohel" } [ "hello" dup 13 rotate ] unit-test
95 { "hello" "ohell" } [ "hello" dup -1 rotate ] unit-test
96 { "hello" "lohel" } [ "hello" dup -12 rotate ] unit-test
97
98 { "hello" } [ "hello" dup 0 rotate! ] unit-test
99 { "llohe" } [ "hello" dup 2 rotate! ] unit-test
100 { "lohel" } [ "hello" dup 13 rotate! ] unit-test
101 { "ohell" } [ "hello" dup -1 rotate! ] unit-test
102 { "lohel" } [ "hello" dup -12 rotate! ] unit-test
103
104 { { } } [ { } [ ] map-concat ] unit-test
105 { V{ 0 0 1 0 1 2 } } [ 4 <iota> [ <iota> ] map-concat ] unit-test
106 { "abc" } [ "abc" [ 1string ] map-concat ] unit-test
107 { "abc" } [ { 97 98 99 } [ 1string ] map-concat ] unit-test
108 { { 97 98 99 } } [ "abc" [ 1string ] { } map-concat-as ] unit-test
109 { "baz" { "foobaz" "barbaz" } }
110 [ "baz" { { "foo" } { "bar" } } [ [ over append ] map ] map-concat ] unit-test
111
112 { { } } [ { } [ ] [ even? ] map-filter ] unit-test
113 { "bcde" } [ "abcd" [ 1 + ] [ drop t ] map-filter ] unit-test
114 { { 0 4 16 36 64 } } [ 10 <iota> [ sq ] [ even? ] { } map-filter-as ] unit-test
115
116 { 120000 } [ { 10 20 30 40 50 60 } 1 [ * ] 3 reduce-from ] unit-test
117
118 { 21 } [
119     { 1 2 3 } { 4 5 6 } 0 [ + + ] 0 2reduce-from
120 ] unit-test
121
122 { 16 } [
123     { 1 2 3 } { 4 5 6 } 0 [ + + ] 1 2reduce-from
124 ] unit-test
125
126 { V{ 0 4 16 36 64 } } [ 10 <iota> [ even? ] [ sq ] filter-map ] unit-test
127 { V{ 0 4 16 36 64 } } [ 10 <iota> [ even? ] [ sq ] filter-map ] unit-test
128 { V{ 2 6 10 14 18 } } [ 10 <iota> [ odd? ] [ 2 * ] V{ } filter-map-as ] unit-test
129 { { 2 6 10 14 18 } } [ 10 <iota> [ odd? ] [ 2 * ] { } filter-map-as ] unit-test
130
131 { V{ 1 9 25 49 81 } } [ 10 <iota> [ even? ] [ sq ] reject-map ] unit-test
132 { V{ 1 9 25 49 81 } } [ 10 <iota> [ even? ] [ sq ] reject-map ] unit-test
133 { V{ 0 4 8 12 16 }  } [ 10 <iota> [ odd? ] [ 2 * ] V{ } reject-map-as ] unit-test
134 { { 0 4 8 12 16 }   } [ 10 <iota> [ odd? ] [ 2 * ] { } reject-map-as ] unit-test
135
136 { V{ 0 4 16 36 64 } } [ 10 <iota> [ dup even? [ sq t ] [ f ] if ] filter-map* ] unit-test
137 { V{ 0 4 16 36 64 } } [ 10 <iota> [ sq dup even? ] filter-map* ] unit-test
138 { V{ 2 6 10 14 18 } } [ 10 <iota> [ dup odd? [ 2 * t ] [ f ] if ] V{ } filter-map-as* ] unit-test
139 { { 2 6 10 14 18 } } [ 10 <iota> [ dup odd? [ 2 * t ] [ f ] if ] { } filter-map-as* ] unit-test
140
141 { V{ 1 9 25 49 81 } } [ 10 <iota> [ dup even? [ t ] [ sq f ] if ] reject-map* ] unit-test
142 { V{ 1 9 25 49 81 } } [ 10 <iota> [ sq dup even? ] reject-map* ] unit-test
143 { V{ 0 4 8 12 16 }  } [ 10 <iota> [ dup odd? [ t ] [ 2 * f ] if ] V{ } reject-map-as* ] unit-test
144 { { 0 4 8 12 16 }   } [ 10 <iota> [ dup odd? [ t ] [ 2 * f ] if ] { } reject-map-as* ] unit-test
145
146 { 8 } [ 3 <iota> dup [ 1 + * ] 2map-sum ] unit-test
147 { 4 } [ "hello" "jello" [ = ] 2count ] unit-test
148
149 { { } } [ { } round-robin ] unit-test
150 { "ADEBFC" } [ { "ABC" "D" "EF" } round-robin >string ] unit-test
151
152 { { } } [ "ABC" [ ] { } trim-as ] unit-test
153 { "ABC" } [ { 32 65 66 67 32 } [ ascii:blank? ] "" trim-as ] unit-test
154
155 { t } [ "ABC" dup [ ascii:blank? ] ?trim [ identity-hashcode ] same? ] unit-test
156 { "ABC" } [ " ABC " [ ascii:blank? ] ?trim ] unit-test
157
158 { t } [ "ABC" dup [ ascii:blank? ] ?trim-head [ identity-hashcode ] same? ] unit-test
159 { t } [ "ABC" dup [ ascii:blank? ] ?trim-tail [ identity-hashcode ] same? ] unit-test
160 { "ABC " } [ " ABC " [ ascii:blank? ] ?trim-head ] unit-test
161 { " ABC" } [ " ABC " [ ascii:blank? ] ?trim-tail ] unit-test
162
163 { "" } [ "" "" "" unsurround ] unit-test
164 { "" } [ "  " " " " " unsurround ] unit-test
165 { "foo.com" } [ "http://foo.com" "http://" "/" unsurround ] unit-test
166
167 { t } [ { 1 3 5 7 } [ even? ] none? ] unit-test
168 { f } [ { 1 2 3 4 } [ even? ] none? ] unit-test
169 { t } [ { } [ even? ] none? ] unit-test
170
171 { f } [ { 1 2 3 4 } [ even? ] one? ] unit-test
172 { t } [ { 1 2 3 } [ even? ] one? ] unit-test
173 { f } [ { } [ even? ] one? ] unit-test
174
175 { { { 5 8 0 } { 6 9 1 } { 7 10 2 } } } [ { 5 6 7 } { 8 9 10 } [ 3array ] 2map-index ] unit-test
176
177 { { } } [ { } <evens> >array ] unit-test
178 { { 0 2 } } [ 4 <iota> <evens> >array ] unit-test
179 { { 0 2 4 } } [ 5 <iota> <evens> >array ] unit-test
180 { "bbddff" } [ "abcdef" <evens> [ 1 + ] map! seq>> ] unit-test
181
182 { { } } [ { } <odds> >array ] unit-test
183 { { 1 3 } } [ 5 <iota> <odds> >array ] unit-test
184 { { 1 3 5 } } [ 6 <iota> <odds> >array ] unit-test
185 { "acceeg" } [ "abcdef" <odds> [ 1 + ] map! seq>> ] unit-test
186
187 { 1 } [ { 1 7 3 7 6 3 7 } arg-max ] unit-test
188 { 2 } [ { 0 1 99 } arg-max ] unit-test
189 { 0 } [ { 1 7 3 7 6 3 7 } arg-min ] unit-test
190 { V{ 0 4 } } [ { 5 3 2 10 5 } [ 5 = ] arg-where ] unit-test
191 { { 2 1 0 4 3 } } [ { 5 3 2 10 5 } arg-sort ] unit-test
192
193 { 10 } [ { 4 3 2 1 } [ 10 * ] map-minimum ] unit-test
194 { 40 } [ { 4 3 2 1 } [ 10 * ] map-maximum ] unit-test
195
196 { t } [ { 1 2 3 4 5 } 1 first= ] unit-test
197 { t } [ { 1 2 3 4 5 } 2 second= ] unit-test
198 { t } [ { 1 2 3 4 5 } 3 third= ] unit-test
199 { t } [ { 1 2 3 4 5 } 4 fourth= ] unit-test
200 { t } [ { 1 2 3 4 5 } 5 last= ] unit-test
201 { t } [ 4 { 1 2 3 4 5 } 5 nth= ] unit-test
202
203 { t } [ { 1 2 3 4 5 } [ 1 = ] first? ] unit-test
204 { t } [ { 1 2 3 4 5 } [ 2 = ] second? ] unit-test
205 { t } [ { 1 2 3 4 5 } [ 3 = ] third? ] unit-test
206 { t } [ { 1 2 3 4 5 } [ 4 = ] fourth? ] unit-test
207 { t } [ { 1 2 3 4 5 } [ 5 = ] last? ] unit-test
208 { t } [ 4 { 1 2 3 4 5 } [ 5 = ] nth? ] unit-test
209
210 { { 97 115 100 102 } } [
211     "asdf" [ [ read1 ] loop>array ] with-string-reader
212 ] unit-test
213
214 { V{ 97 115 100 102 } } [
215     "asdf" [ [ read1 ] V{ } loop>sequence ] with-string-reader
216 ] unit-test
217
218 { "" } [ { } "" reverse-as ] unit-test
219 { "ABC" } [ { 67 66 65 } "" reverse-as ] unit-test
220
221 { V{ 1 } } [ 1 0 V{ } [ insert-nth! ] keep ] unit-test
222 { V{ 1 2 3 4 } } [ 2 1 V{ 1 3 4 } [ insert-nth! ] keep ] unit-test
223
224 { V{ 1 3 } } [ V{ 1 2 3 } 1 2 delete-slice-of ] unit-test
225 { V{ 1 2 } } [ V{ 1 2 3 } 2 remove-nth-of! ] unit-test
226
227 {
228     T{ slice { to 1 } { seq V{ 1 2 3 4 5 } } }
229     T{ slice { from 2 } { to 5 } { seq V{ 1 2 3 4 5 } } }
230 } [
231     V{ 1 2 3 4 5 } 1 2 snip-slice-of
232 ] unit-test
233
234 { V{ 1 } V{ 3 4 5 } } [
235     V{ 1 2 3 4 5 } 1 2 snip-of
236 ] unit-test
237
238 { "abc" } [ B{ 97 98 99 100 101 102 103 } 3 "" head-as ] unit-test
239 { "abcd" } [ B{ 97 98 99 100 101 102 103 } 3 "" head*-as ] unit-test
240 { "defg" } [ B{ 97 98 99 100 101 102 103 } 3 "" tail-as ] unit-test
241 { "efg" } [ B{ 97 98 99 100 101 102 103 } 3 "" tail*-as ] unit-test
242
243 { { 1 0 0 1 0 0 0 1 0 0 } }
244 [ 1 { 0 3 7 } 10 0 <array> [ set-nths ] keep ] unit-test
245
246 { { 1 0 0 1 0 0 0 1 0 0 } }
247 [ 1 { 0 3 7 } 10 0 <array> [ set-nths-unsafe ] keep ] unit-test
248
249 { t 3 3 } [ 10 <iota> [ [ odd? ] [ 1 > ] bi* and ] map-find-index ] unit-test
250 { f f f } [ 10 <iota> [ [ odd? ] [ 9 > ] bi* and ] map-find-index ] unit-test
251
252 { { 0 400 900 } }
253 [ { 10 20 30 } [ sq ] 1 map-from ] unit-test
254
255 { V{ f 400 900 } }
256 [ { 10 20 30 } [ sq ] 1 V{ } map-from-as ] unit-test
257
258 { "abcdef" } [ f f "abcdef" subseq* ] unit-test
259 { "abcdef" } [ 0 f "abcdef" subseq* ] unit-test
260 { "ab" } [ f 2 "abcdef" subseq* ] unit-test
261 { "cdef" } [ 2 f "abcdef" subseq* ] unit-test
262 { "cd" } [ -4 -2 "abcdef" subseq* ] unit-test
263
264 { "foo" "" } [ "foo" [ ascii:blank? ] cut-when ] unit-test
265 { "foo" " " } [ "foo " [ ascii:blank? ] cut-when ] unit-test
266 { "" " foo" } [ " foo" [ ascii:blank? ] cut-when ] unit-test
267 { "foo" " bar" } [ "foo bar" [ ascii:blank? ] cut-when ] unit-test
268
269 { { 4 0 3 1 2 } } [ { 0 4 1 3 2 } 5 <iota> [ nth* ] curry map ] unit-test
270
271 { 1 "beef" } [ { "chicken" "beef" "moose" } [ length ] minimum-by* ] unit-test
272 { 0 "chicken" } [ { "chicken" "beef" "moose" } [ length ] maximum-by* ] unit-test
273 { 2 "moose" } [ { "chicken" "beef" "moose" } [ first ] maximum-by* ] unit-test
274 { f } [ f ?maximum ] unit-test
275 { f } [ { } ?maximum ] unit-test
276 { f } [ { f } ?maximum ] unit-test
277 { 3 } [ { 1 f 3 2 } ?maximum ] unit-test
278 { 3 } [ { 1 3 2 } ?maximum ] unit-test
279 { f } [ f ?minimum ] unit-test
280 { f } [ { } ?minimum ] unit-test
281 { f } [ { f } ?minimum ] unit-test
282 { 1 } [ { 1 f 3 2 } ?minimum ] unit-test
283 { 1 } [ { 1 3 2 } ?minimum ] unit-test
284
285 { 3/10 } [ 10 <iota> [ 3 < ] percent-of ] unit-test
286
287 { { 0 } } [ "ABABA" "ABA" start-all ] unit-test
288 { { 0 2 } } [ "ABABA" "ABA" start-all* ] unit-test
289 { { 0 3 } } [ "ABAABA" "ABA" start-all ] unit-test
290 { 1 } [ "ABABA" "ABA" count-subseq ] unit-test
291 { 2 } [ "ABABA" "ABA" count-subseq* ] unit-test
292
293 { 0 } [ { } [ + ] 0reduce ] unit-test
294 { 107 } [ { 100 1 2 4 } [ + ] 0reduce ] unit-test
295 { 0 } [ { 100 1 2 4 } [ * ] 0reduce ] unit-test
296
297 { f } [ { } [ + ] 1reduce ] unit-test
298 { 107 } [ { 100 1 2 4 } [ + ] 1reduce ] unit-test
299 { 800 } [ { 100 1 2 4 } [ * ] 1reduce ] unit-test
300
301 { 800 } [ { 100 1 2 4 } [ * ] 1 reduce-of ] unit-test
302 { 800 { 1 100 100 200 } } [ { 100 1 2 4 } [ * ] 1 accumulate-of ] unit-test
303
304 { { } } [ { } [ + ] 0accumulate ] unit-test
305 { { 100 101 103 107 } } [ { 100 1 2 4 } [ + ] 0accumulate ] unit-test
306
307 { { "y" "o" "y" "p" "o" "y" } }
308 [ { "y" "o" "y" "p" "o" "y" } [ classify ] [ deduplicate ] bi nths ] unit-test
309
310 { { "take" "drop" "pick" } }
311 [ { "take" "drop" "drop" "pick" "take" "take" } deduplicate ] unit-test
312
313 { { "drop" "pick" "take" } }
314 [ { "take" "drop" "drop" "pick" "take" "take" } deduplicate-last ] unit-test
315
316 { { } }
317 [ "" mark-firsts ] unit-test
318
319 { { 1 1 0 0 1 0 } }
320 [ "abaacb" mark-firsts ] unit-test
321
322 {
323     H{ { t 6 } { f 5 } }
324     { 0 0 1 1 2 3 4 2 3 4 5 }
325 } [
326     { 2 7 1 8 1 7 1 8 2 8 4 } [ even? ] occurrence-count-by
327 ] unit-test
328
329 {
330     H{ { 8 3 } { 1 3 } { 2 2 } { 4 1 } { 7 2 } }
331     { 0 0 0 0 1 1 2 1 1 2 0 }
332 } [
333     { 2 7 1 8 1 7 1 8 2 8 4 } [ ] occurrence-count-by
334 ] unit-test
335
336 {
337     H{
338         { 97 1 } { 98 1 } { 99 1 } { 100 1 } { 101 1 } { 102 1 }
339         { 103 1 } { 104 1 } { 105 1 } { 106 1 } { 107 1 } { 108 1 }
340         { 109 1 } { 110 1 } { 111 1 } { 112 1 }
341     }
342     { 1 2 0 3 3 3 3 3 3 3 3 3 3 3 3 3 }
343 } [
344     "cab" "abcdefghijklmnop" progressive-index
345 ] unit-test
346
347 { H{ { 97 5 } } { 0 1 2 3 3 } } [
348     "aaa" "aaaaa" progressive-index
349 ] unit-test
350
351 { H{ { 97 5 } { 98 5 } } { 0 3 1 4 2 5 5 5 5 5 } } [
352     "aaabb" "ababababab" progressive-index
353 ] unit-test
354
355 { { 0 1 2 3 } } [ 8 <iota> [ 4 < ] take-while >array ] unit-test
356 { { } } [ { 15 16 } [ 4 < ] take-while >array ] unit-test
357 { { 0 1 2 } } [ 3 <iota> [ 4 < ] take-while >array ] unit-test
358
359 { { 4 5 6 7 } } [ 8 <iota> [ 4 < ] drop-while >array ] unit-test
360 { { 15 16 } } [ { 15 16 } [ 4 < ] drop-while >array ] unit-test
361 { { } } [ 3 <iota> [ 4 < ] drop-while >array ] unit-test
362
363 { { } } [ { } ", " interleaved ] unit-test
364 { { 1 } } [ { 1 } ", " interleaved ] unit-test
365 { { 1 ", " 2 } } [ { 1 2 } ", " interleaved ] unit-test
366 { "" } [ "" CHAR: _ interleaved ] unit-test
367 { "a" } [ "a" CHAR: _ interleaved ] unit-test
368 { "a_b" } [ "ab" CHAR: _ interleaved ] unit-test
369 { "a_b_c" } [ "abc" CHAR: _ interleaved ] unit-test
370 { "a_b_c_d" } [ "abcd" CHAR: _ interleaved ] unit-test
371
372 { 0 } [ { 1 2 3 4 } [ 5 > ] count-head ] unit-test
373 { 2 } [ { 1 2 3 4 } [ 3 < ] count-head ] unit-test
374 { 4 } [ { 1 2 3 4 } [ 5 < ] count-head ] unit-test
375
376 { 0 } [ { 1 2 3 4 } [ 5 > ] count-tail ] unit-test
377 { 2 } [ { 1 2 3 4 } [ 2 > ] count-tail ] unit-test
378 { 4 } [ { 1 2 3 4 } [ 5 < ] count-tail ] unit-test
379
380 { t } [ { 1 2 3 4 } [ 5 > ] 0 count= ] unit-test
381 { f } [ { 1 2 3 4 } [ 5 > ] 1 count= ] unit-test
382 { 1 t } [ 1 { 1 1 3 4 } [ dupd = ] 2 count= ] unit-test
383 { 1 f } [ 1 { 1 1 3 4 } [ dupd = ] 3 count= ] unit-test
384 { 4 t } [ 0 { 1 1 3 4 } [ [ 1 + dup ] dip = ] 3 count= ] unit-test
385 { 5 8 f } [ 0 1 { 1 1 2 3 5 8 } [ [ swap dupd + ] dip pick = ] 4 count= ] unit-test
386 { 8 13 t } [ 0 1 { 1 1 0 3 0 8 } [ [ swap dupd + ] dip pick = ] 4 count= ] unit-test
387 { 8 13 f } [ 0 1 { 1 1 2 3 5 8 } [ [ swap dupd + ] dip pick = ] 8 count= ] unit-test
388
389 { SBUF" aco" SBUF" ftr"  } [ SBUF" factor" dup [ even? ] extract! ] unit-test
390
391 { 25 5 1 } [ { 4 5 6 } [ sq ] [ 20 > ] find-pred ] unit-test
392 { f f f } [ { 4 5 6 } [ sq ] [ 200 > ] find-pred ] unit-test
393
394 { -1/0. } [ { } max-subarray-sum ] unit-test
395 { -2 } [ { -3 -2 } max-subarray-sum ] unit-test
396 { 7 } [ { 1 2 3 -4 5 } max-subarray-sum ] unit-test
397 { 6 } [ { 1 2 3 -4 1 1 } max-subarray-sum ] unit-test
398
399 { { 9 7 5 } } [ -1 -6 -2 10 <iota> <step-slice> >array ] unit-test
400 { { 9 7 } } [ -1 -5 -2 10 <iota> <step-slice> >array ] unit-test
401 { { 9 7 } } [ -1 -4 -2 10 <iota> <step-slice> >array ] unit-test
402 { { 9 } } [ -1 -3 -2 10 <iota> <step-slice> >array ] unit-test
403 { { } } [ -4 10 -2 10 <iota> <step-slice> >array ] unit-test
404 { { 6 8 } } [ -4 15 2 10 <iota> <step-slice> >array ] unit-test
405 { { 1 3 } } [ 1 4 2 10 <iota> <step-slice> >array ] unit-test
406 { { 1 3 } } [ 1 5 2 10 <iota> <step-slice> >array ] unit-test
407 { { 1 3 5 } } [ 1 6 2 10 <iota> <step-slice> >array ] unit-test
408
409 { { 102 306 1530 } } [
410     { 2 3 5 } [ swap [ * ] [ 100 + ] if* ] map-with-previous
411 ] unit-test
412
413 { { } } [
414     { } [ nip ] map-with-previous
415 ] unit-test
416
417 { { -1 2 -3 4 -5 } } [ { 1 2 3 4 5 } [ odd? ] [ neg ] map-if ] unit-test
418
419 { { { 100 0 } { 200 1 } { 300 2 } { 400 3 } } } [
420     { 100 200 300 400 } <zip-index> >array
421 ] unit-test
422
423 { } [
424     { } [ - . ] each-prior
425 ] unit-test
426
427 { } [
428     1000 { } [ - . ] each-prior-from
429 ] unit-test
430
431 { } [
432     { 5 16 42 103 } [ - . ] each-prior
433 ] unit-test
434
435 { } [
436     1 { 5 16 42 103 } [ - . ] each-prior-from
437 ] unit-test
438
439
440 { { } } [
441     { } [ - ] map-prior
442 ] unit-test
443
444 { V{ 5 11 26 61 } } [
445     V{ 5 16 42 103 } [ - ] map-prior
446 ] unit-test
447
448 { V{ f f 26 61 } } [
449     2 V{ 5 16 42 103 } [ - ] map-prior-from
450 ] unit-test
451
452 { V{ f f 26 61 } } [
453     2 { 5 16 42 103 } [ - ] V{ } map-prior-from-as
454 ] unit-test
455
456 { V{ } } [
457     { } [ - ] V{ } map-prior-as
458 ] unit-test
459
460 { { 5 11 26 61 } } [
461     V{ 5 16 42 103 } [ - ] { } map-prior-as
462 ] unit-test
463
464 { f } [ 0 CHAR: a "foo" nth-index ] unit-test
465 { 0 } [ 0 CHAR: a "abba" nth-index ] unit-test
466 { 3 } [ 1 CHAR: a "abba" nth-index ] unit-test
467 { f } [ 2 CHAR: a "abba" nth-index ] unit-test
468
469 { { -995 11 26 61 } } [
470     1000 V{ 5 16 42 103 } [ - ] { } map-prior-identity-as
471 ] unit-test
472
473 { V{ 1 4 9 } } [
474     { 1 2 3 } { 1 2 3 }
475     [ 2dup 2array all-eq? [ * ] [ 2drop f ] if ]
476     V{ } 2nested-filter-as
477 ] unit-test
478
479 { V{ 1 8 27 } } [
480     { 1 2 3 } { 1 2 3 } { 1 2 3 }
481     [ 3dup 3array all-eq? [ * * ] [ 3drop f ] if ]
482     V{ } 3nested-filter-as
483 ] unit-test
484
485 { V{ 0 2 0 3 6 4 12 0 5 10 15 20 } } [
486     6 [1..b)
487     [ [0..b) ]
488     [ 2dup [ odd? ] bi@ or [ * ] [ 2drop f ] if  ]
489     2nested-filter*
490 ] unit-test
491
492 { 20 1 } [ { 10 20 30 } [ 20 = ] find* ] unit-test
493 { f f } [ { 10 20 30 } [ 21 = ] find* ] unit-test
494
495 { 20 1 } [ 0 { 10 20 30 } [ 20 = ] find-from* ] unit-test
496 { f f } [ 0 { 10 20 30 } [ 21 = ] find-from* ] unit-test
497 { 20 1 } [ 0 { 10 20 30 } [ 20 = ] find-from* ] unit-test
498 { 20 1 } [ 1 { 10 20 30 } [ 20 = ] find-from* ] unit-test
499 { f f } [ 2 { 10 20 30 } [ 20 = ] find-from* ] unit-test
500
501 { 20 1 } [ { 10 20 30 } [ 20 = ] find-last* ] unit-test
502 { f f } [ { } [ 21 = ] find-last* ] unit-test
503 { f f } [ { 10 20 30 } [ 21 = ] find-last* ] unit-test
504
505 { f f } [ 0 { 10 20 30 } [ 20 = ] find-last-from* ] unit-test
506 { 20 1 } [ 1 { 10 20 30 } [ 20 = ] find-last-from* ] unit-test
507 { 20 1 } [ 2 { 10 20 30 } [ 20 = ] find-last-from* ] unit-test
508
509 { 20 1 } [ { 10 20 30 } [ drop 20 = ] find-index* ] unit-test
510 { f f } [ { 10 20 30 } [ drop 21 = ] find-index* ] unit-test
511
512 { 20 1 } [ 0 { 10 20 30 } [ drop 20 = ] find-index-from* ] unit-test
513 { f f } [ 0 { 10 20 30 } [ drop 21 = ] find-index-from* ] unit-test
514
515 { { { 1 1 } { 2 2 } { 0 3 } { 0 4 } { 0 5 } } } [
516     { 1 2 } { 1 2 3 4 5 } 0 zip-longest-with
517 ] unit-test
518
519 { { { 1 1 } { 2 2 } { f 3 } { f 4 } { f 5 } } } [
520     { 1 2 } { 1 2 3 4 5 } zip-longest
521 ] unit-test
522
523 { "34_01_" } [ 2 0 3 "01_34_" [ exchange-subseq ] keep ] unit-test
524 { "cdebaf" } [ 3 0 2 "abcdef" [ exchange-subseq ] keep ] unit-test
525
526 { { } } [ { } sequence-cartesian-product ] unit-test
527 { { } } [ { { } } sequence-cartesian-product ] unit-test
528 { { } } [ { { 1 2 } { } } sequence-cartesian-product ] unit-test
529 { { { 1 } { 2 } } } [ { { 1 2 } } sequence-cartesian-product ] unit-test
530
531 {
532     {
533         { 1 3 5 6 { 9 } }
534         { 1 3 5 7 { 9 } }
535         { 1 4 5 6 { 9 } }
536         { 1 4 5 7 { 9 } }
537         { 2 3 5 6 { 9 } }
538         { 2 3 5 7 { 9 } }
539         { 2 4 5 6 { 9 } }
540         { 2 4 5 7 { 9 } }
541     }
542 } [
543     { { 1 2 } { 3 4 } { 5 } { 6 7 } { { 9 } } } sequence-cartesian-product
544 ] unit-test