]> gitweb.factorcode.org Git - factor.git/blob - extra/sequences/extras/extras-tests.factor
sequences.extras: rename rotate to rotate-headwards and rotate-tailwards. add experim...
[factor.git] / extra / sequences / extras / extras-tests.factor
1 USING: accessors arrays ascii io io.streams.string kernel make
2 math math.vectors random sequences sequences.extras strings
3 tools.test vectors vocabs ;
4 IN: sequences.extras.tests
5
6 { { "a" "b" "c" "d" "ab" "bc" "cd" "abc" "bcd" "abcd" } } [ "abcd" all-subseqs ] unit-test
7
8 { { "a" "ab" "abc" "abcd" "b" "bc" "bcd" "c" "cd" "d" } }
9 [ [ "abcd" [ , ] each-subseq ] { } make ] unit-test
10
11 { B{ 115 } } [ 1 2 "asdf" B{ } subseq-as ] unit-test
12
13 { "" } [ "abc" "def" longest-subseq ] unit-test
14 { "abcd" } [ "abcd" "abcde" longest-subseq ] unit-test
15 { "foo" } [ "foo" "foobar" longest-subseq ] unit-test
16 { "foo" } [ "foobar" "foo" longest-subseq ] unit-test
17
18 { "" "" } [ "" "" CHAR: ? pad-longest ] unit-test
19 { "abc" "def" } [ "abc" "def" CHAR: ? pad-longest ] unit-test
20 { "   " "abc" } [ "" "abc" CHAR: \s pad-longest ] unit-test
21 { "abc" "   " } [ "abc" "" CHAR: \s pad-longest ] unit-test
22 { "abc..." "foobar" } [ "abc" "foobar" CHAR: . pad-longest ] unit-test
23
24 { { 0 1 0 1 } } [
25     { 0 0 0 0 } { 1 3 } over [ 1 + ] change-nths
26 ] unit-test
27
28 { V{ f t f } } [
29     { 1 2 3 } [ even? ] selector* [ each ] dip
30 ] unit-test
31
32 { { 1 3 5 } } [ { 1 2 3 4 5 6 } [ nip even? ] filter-index ] unit-test
33
34 { V{ 1 3 5 } } [ { 1 2 3 4 5 6 } [ nip even? ] V{ } filter-index-as ] unit-test
35
36 { { 1 3 5 } } [ { 1 2 3 4 5 6 } even-indices ] unit-test
37
38 { { 2 4 6 } } [ { 1 2 3 4 5 6 } odd-indices ] unit-test
39
40 { "a b c d e" }
41 [ "a      b  \t \n \r  c   d \n    e   " [ blank? ] " " compact ] unit-test
42
43 { " a b c d e " }
44 [ " a      b  c   d    e   " [ blank? ] " " collapse ] unit-test
45
46 { { "hello," " " "world!" " " " " } }
47 [ "hello, world!  " [ blank? ] slice-when [ >string ] map ] unit-test
48
49 { t }
50 [ "abc" sequence>slice slice? ] unit-test
51
52 { "abc" }
53 [ "abc" sequence>slice >string ] unit-test
54
55
56 { "hello" } [ "hello" 0 rotate-headwards ] unit-test
57 { "llohe" } [ "hello" 2 rotate-headwards ] unit-test
58 { "hello" } [ "hello" dup 0 rotate-headwards! ] unit-test
59 { "lohel" } [ "hello" dup 3 rotate-headwards! ] unit-test
60
61 { { } } [ { } [ ] map-concat ] unit-test
62 { V{ 0 0 1 0 1 2 } } [ 4 iota [ iota ] map-concat ] unit-test
63 { "abc" } [ "abc" [ 1string ] map-concat ] unit-test
64 { "abc" } [ { 97 98 99 } [ 1string ] map-concat ] unit-test
65 { { 97 98 99 } } [ "abc" [ 1string ] { } map-concat-as ] unit-test
66 { "baz" { "foobaz" "barbaz" } }
67 [ "baz" { { "foo" } { "bar" } } [ [ over append ] map ] map-concat ] unit-test
68
69 { { } } [ { } [ ] [ even? ] map-filter ] unit-test
70 { "bcde" } [ "abcd" [ 1 + ] [ drop t ] map-filter ] unit-test
71 { { 0 4 16 36 64 } } [ 10 iota [ sq ] [ even? ] { } map-filter-as ] unit-test
72
73 { V{ 0 4 16 36 64 } } [ 10 iota [ even? ] [ sq ] filter-map ] unit-test
74 { { 2 6 10 14 18 } } [ 10 iota [ odd? ] [ 2 * ] { } filter-map-as ] unit-test
75
76 { 8 } [ 3 iota dup [ 1 + * ] 2map-sum ] unit-test
77 { 4 } [ "hello" "jello" [ = ] 2count ] unit-test
78
79 { { } } [ { } round-robin ] unit-test
80 { "ADEBFC" } [ { "ABC" "D" "EF" } round-robin >string ] unit-test
81
82 { { } } [ "ABC" [ ] { } trim-as ] unit-test
83 { "ABC" } [ { 32 65 66 67 32 } [ blank? ] "" trim-as ] unit-test
84
85 { t } [ "ABC" dup [ blank? ] ?trim [ identity-hashcode ] same? ] unit-test
86 { "ABC" } [ " ABC " [ blank? ] ?trim ] unit-test
87
88 { t } [ "ABC" dup [ blank? ] ?trim-head [ identity-hashcode ] same? ] unit-test
89 { t } [ "ABC" dup [ blank? ] ?trim-tail [ identity-hashcode ] same? ] unit-test
90 { "ABC " } [ " ABC " [ blank? ] ?trim-head ] unit-test
91 { " ABC" } [ " ABC " [ blank? ] ?trim-tail ] unit-test
92
93 { "" } [ "" "" "" unsurround ] unit-test
94 { "" } [ "  " " " " " unsurround ] unit-test
95 { "foo.com" } [ "http://foo.com" "http://" "/" unsurround ] unit-test
96
97 { t } [ { 1 3 5 7 } [ even? ] none? ] unit-test
98 { f } [ { 1 2 3 4 } [ even? ] none? ] unit-test
99 { t } [ { } [ even? ] none? ] unit-test
100
101 { f } [ { 1 2 3 4 } [ even? ] one? ] unit-test
102 { t } [ { 1 2 3 } [ even? ] one? ] unit-test
103 { f } [ { } [ even? ] one? ] unit-test
104
105 { { { 5 8 0 } { 6 9 1 } { 7 10 2 } } } [ { 5 6 7 } { 8 9 10 } [ 3array ] 2map-index ] unit-test
106
107 { { } } [ { } <evens> >array ] unit-test
108 { { 0 2 } } [ 4 iota <evens> >array ] unit-test
109 { { 0 2 4 } } [ 5 iota <evens> >array ] unit-test
110
111 { { } } [ { } <odds> >array ] unit-test
112 { { 1 3 } } [ 5 iota <odds> >array ] unit-test
113 { { 1 3 5 } } [ 6 iota <odds> >array ] unit-test
114
115 { 1 } [ { 1 7 3 7 6 3 7 } arg-max ] unit-test
116 { 0 } [ { 1 7 3 7 6 3 7 } arg-min ] unit-test
117 { V{ 0 4 } } [ { 5 3 2 10 5 } [ 5 = ] arg-where ] unit-test
118 { { 2 1 0 4 3 } } [ { 5 3 2 10 5 } arg-sort ] unit-test
119
120 { t } [ { 1 2 3 4 5 } 1 first= ] unit-test
121 { t } [ { 1 2 3 4 5 } 2 second= ] unit-test
122 { t } [ { 1 2 3 4 5 } 3 third= ] unit-test
123 { t } [ { 1 2 3 4 5 } 4 fourth= ] unit-test
124 { t } [ { 1 2 3 4 5 } 5 last= ] unit-test
125 { t } [ 4 { 1 2 3 4 5 } 5 nth= ] unit-test
126
127 { t } [ { 1 2 3 4 5 } [ 1 = ] first? ] unit-test
128 { t } [ { 1 2 3 4 5 } [ 2 = ] second? ] unit-test
129 { t } [ { 1 2 3 4 5 } [ 3 = ] third? ] unit-test
130 { t } [ { 1 2 3 4 5 } [ 4 = ] fourth? ] unit-test
131 { t } [ { 1 2 3 4 5 } [ 5 = ] last? ] unit-test
132 { t } [ 4 { 1 2 3 4 5 } [ 5 = ] nth? ] unit-test
133
134 { { 97 115 100 102 } } [
135     "asdf" [ [ read1 ] loop>array ] with-string-reader
136 ] unit-test
137
138 { V{ 97 115 100 102 } } [
139     "asdf" [ [ read1 ] V{ } loop>sequence ] with-string-reader
140 ] unit-test
141
142 { "" } [ { } "" reverse-as ] unit-test
143 { "ABC" } [ { 67 66 65 } "" reverse-as ] unit-test
144
145 { V{ 1 } } [ 1 0 V{ } [ insert-nth! ] keep ] unit-test
146 { V{ 1 2 3 4 } } [ 2 1 V{ 1 3 4 } [ insert-nth! ] keep ] unit-test
147
148 { "abc" } [ B{ 97 98 99 100 101 102 103 } 3 "" head-as ] unit-test
149 { "abcd" } [ B{ 97 98 99 100 101 102 103 } 3 "" head*-as ] unit-test
150 { "defg" } [ B{ 97 98 99 100 101 102 103 } 3 "" tail-as ] unit-test
151 { "efg" } [ B{ 97 98 99 100 101 102 103 } 3 "" tail*-as ] unit-test
152
153 { { 1 0 0 1 0 0 0 1 0 0 } }
154 [ 1 { 0 3 7 } 10 0 <array> [ set-nths ] keep ] unit-test
155
156 { { 1 0 0 1 0 0 0 1 0 0 } }
157 [ 1 { 0 3 7 } 10 0 <array> [ set-nths-unsafe ] keep ] unit-test
158
159 { V{ 1 } } [ 1 flatten1 ] unit-test
160 { { 1 2 3 } } [ { 1 2 3 } flatten1 ] unit-test
161 { { 1 2 3 { { 4 } } } } [ { 1 { 2 } { 3 { { 4 } } } } flatten1 ] unit-test
162
163 { t 3 3 } [ 10 iota [ [ odd? ] [ 1 > ] bi* and ] map-find-index ] unit-test
164 { f f f } [ 10 iota [ [ odd? ] [ 9 > ] bi* and ] map-find-index ] unit-test
165
166 { "abcdef" } [ f f "abcdef" subseq* ] unit-test
167 { "abcdef" } [ 0 f "abcdef" subseq* ] unit-test
168 { "ab" } [ f 2 "abcdef" subseq* ] unit-test
169 { "cdef" } [ 2 f "abcdef" subseq* ] unit-test
170 { "cd" } [ -4 -2 "abcdef" subseq* ] unit-test
171
172 { "foo" "" } [ "foo" [ blank? ] cut-when ] unit-test
173 { "foo" " " } [ "foo " [ blank? ] cut-when ] unit-test
174 { "" " foo" } [ " foo" [ blank? ] cut-when ] unit-test
175 { "foo" " bar" } [ "foo bar" [ blank? ] cut-when ] unit-test
176
177 { { 4 0 3 1 2 } } [ { 0 4 1 3 2 } 5 iota [ nth* ] curry map ] unit-test
178
179 { 1 "beef" } [ { "chicken" "beef" "moose" } [ length ] infimum-by* ] unit-test
180 { 0 "chicken" } [ { "chicken" "beef" "moose" } [ length ] supremum-by* ] unit-test
181 { 2 "moose" } [ { "chicken" "beef" "moose" } [ first ] supremum-by* ] unit-test
182
183 { 3/10 } [ 10 iota [ 3 < ] count* ] unit-test
184
185 { { 0 } } [ "ABA" "ABABA" start-all ] unit-test
186 { { 0 2 } } [ "ABA" "ABABA" start-all* ] unit-test
187 { { 0 3 } } [ "ABA" "ABAABA" start-all ] unit-test
188 { 1 } [ "ABA" "ABABA" count-subseq ] unit-test
189 { 2 } [ "ABA" "ABABA" count-subseq* ] unit-test
190
191 { 120000 } [ { 10 20 30 40 50 60 } 1 [ * ] 3 reduce-from ] unit-test
192
193 {
194     {
195         { 2 4 }
196         { 3 6 }
197         { 4 8 }
198     }
199 } [ { 2 3 4 } [ 2 * ] map-zip ] unit-test
200
201 { }
202 [ "test:" all-words [ name>> over prepend ] map-zip 2drop ] unit-test
203