]> gitweb.factorcode.org Git - factor.git/blob - basis/sequences/generalizations/generalizations-tests.factor
sequences.generalizations: adding lastn, set-lastn, ?lastn.
[factor.git] / basis / sequences / generalizations / generalizations-tests.factor
1 ! Copyright (C) 2009 Joe Groff.
2 ! See https://factorcode.org/license.txt for BSD license.
3 USING: io io.streams.string kernel math sequences
4 sequences.generalizations tools.test ;
5 IN: sequences.generalizations.tests
6
7 { 1 2 3 4 } [ { 1 2 3 4 } 4 firstn ] unit-test
8 { { 1 2 3 4 } } [ 1 2 3 4 { f f f f } [ 4 set-firstn ] keep ] unit-test
9 [ 1 2 3 4 { f f f } [ 4 set-firstn ] keep ] must-fail
10 { } [ { } 0 firstn ] unit-test
11 { "a" } [ { "a" } 1 firstn ] unit-test
12
13 { } [ { } 0 ?firstn ] unit-test
14 { f } [ { } 1 ?firstn ] unit-test
15 { f f } [ { } 2 ?firstn ] unit-test
16 { 1 f } [ { 1 } 2 ?firstn ] unit-test
17 { 1 2 } [ { 1 2 } 2 ?firstn ] unit-test
18 { 1 2 } [ { 1 2 3 } 2 ?firstn ] unit-test
19
20 [ f 2 lastn ] must-fail
21 [ { 1 } 2 lastn ] must-fail
22 { 1 2 } [ { 1 2 } 2 lastn ] unit-test
23 { 2 3 } [ { 1 2 3 } 2 lastn ] unit-test
24
25 { } [ f 0 ?lastn ] unit-test
26 { 1 } [ { 1 } 1 ?lastn ] unit-test
27 { f 1 } [ { 1 } 2 ?lastn ] unit-test
28 { 1 2 } [ { 1 2 } 2 ?lastn ] unit-test
29 { 2 3 } [ { 1 2 3 } 2 ?lastn ] unit-test
30
31 { { f f 1 } } [ 1 { f f f } [ 1 set-lastn ] keep ] unit-test
32 { { f 1 2 } } [ 1 2 { f f f } [ 2 set-lastn ] keep ] unit-test
33 { { 1 2 3 } } [ 1 2 3 { f f f } [ 3 set-lastn ] keep ] unit-test
34
35 { [ 1 2 ] } [ 1 2 2 [ ] nsequence ] unit-test
36 { { 1 2 3 4 5 } } [ 1 2 3 4 5 { 0 0 0 0 0 } 5 (nsequence) ] unit-test
37
38 { { 1 2 3 4 } } [ { 1 } { 2 } { 3 } { 4 } 4 nappend ] unit-test
39 { V{ 1 2 3 4 } } [ { 1 } { 2 } { 3 } { 4 } 4 V{ } nappend-as ] unit-test
40
41 [ 4 nappend ] must-infer
42 [ 4 { } nappend-as ] must-infer
43
44 : neach-test ( a b c d -- )
45     [ 4 nappend print ] 4 neach ;
46 : nmap-test ( a b c d -- e )
47     [ 4 nappend ] 4 nmap ;
48 : nmap-as-test ( a b c d -- e )
49     [ 4 nappend ] [ ] 4 nmap-as ;
50 : mnmap-3-test ( a b c d -- e f g )
51     [ append ] 4 3 mnmap ;
52 : mnmap-2-test ( a b c d -- e f )
53     [ [ append ] 2bi@ ] 4 2 mnmap ;
54 : mnmap-as-test ( a b c d -- e f )
55     [ [ append ] 2bi@ ] { } [ ] 4 2 mnmap-as ;
56 : mnmap-1-test ( a b c d -- e )
57     [ 4 nappend ] 4 1 mnmap ;
58 : mnmap-0-test ( a b c d -- )
59     [ 4 nappend print ] 4 0 mnmap ;
60 : nproduce-as-test ( n -- a b )
61     [ dup zero? not ]
62     [ [ 2 - ] [ ] [ 1 - ] tri ] { } B{ } 2 nproduce-as nipd ;
63 : nproduce-test ( n -- a b )
64     [ dup zero? not ]
65     [ [ 2 - ] [ ] [ 1 - ] tri ] 2 nproduce nipd ;
66
67 { "A1a!
68 B2b@
69 C3c#
70 D4d$
71 " } [
72     { "A" "B" "C" "D" }
73     { "1" "2" "3" "4" }
74     { "a" "b" "c" "d" }
75     { "!" "@" "#" "$" }
76     [ neach-test ] with-string-writer
77 ] unit-test
78
79 { { "A1a!" "B2b@" "C3c#" "D4d$" } }
80 [
81     { "A" "B" "C" "D" }
82     { "1" "2" "3" "4" }
83     { "a" "b" "c" "d" }
84     { "!" "@" "#" "$" }
85     nmap-test
86 ] unit-test
87
88 { [ "A1a!" "B2b@" "C3c#" "D4d$" ] }
89 [
90     { "A" "B" "C" "D" }
91     { "1" "2" "3" "4" }
92     { "a" "b" "c" "d" }
93     { "!" "@" "#" "$" }
94     nmap-as-test
95 ] unit-test
96
97 {
98     { "A" "B" "C" "D" }
99     { "1" "2" "3" "4" }
100     { "a!" "b@" "c#" "d$" }
101 } [
102     { "A" "B" "C" "D" }
103     { "1" "2" "3" "4" }
104     { "a" "b" "c" "d" }
105     { "!" "@" "#" "$" }
106     mnmap-3-test
107 ] unit-test
108
109 {
110     { "A1" "B2" "C3" "D4" }
111     { "a!" "b@" "c#" "d$" }
112 } [
113     { "A" "B" "C" "D" }
114     { "1" "2" "3" "4" }
115     { "a" "b" "c" "d" }
116     { "!" "@" "#" "$" }
117     mnmap-2-test
118 ] unit-test
119
120 {
121     { "A1" "B2" "C3" "D4" }
122     [ "a!" "b@" "c#" "d$" ]
123 } [
124     { "A" "B" "C" "D" }
125     { "1" "2" "3" "4" }
126     { "a" "b" "c" "d" }
127     { "!" "@" "#" "$" }
128     mnmap-as-test
129 ] unit-test
130
131 { { "A1a!" "B2b@" "C3c#" "D4d$" } }
132 [
133     { "A" "B" "C" "D" }
134     { "1" "2" "3" "4" }
135     { "a" "b" "c" "d" }
136     { "!" "@" "#" "$" }
137     mnmap-1-test
138 ] unit-test
139
140 { "A1a!
141 B2b@
142 C3c#
143 D4d$
144 " } [
145     { "A" "B" "C" "D" }
146     { "1" "2" "3" "4" }
147     { "a" "b" "c" "d" }
148     { "!" "@" "#" "$" }
149     [ mnmap-0-test ] with-string-writer
150 ] unit-test
151
152 { { 10 8 6 4 2 } B{ 9 7 5 3 1 } }
153 [ 10 nproduce-as-test ] unit-test
154
155 { { 10 8 6 4 2 } { 9 7 5 3 1 } }
156 [ 10 nproduce-test ] unit-test
157
158 { 45 } [
159     { 1 2 3 } { 4 5 6 } { 7 8 9 } [ + + ] [ + ] 3 nmap-reduce
160 ] unit-test
161
162 { t } [
163     { 1 3 5 } { 2 4 6 } { 4 8 12 } [ + + odd? ] 3 nall?
164 ] unit-test
165
166 { t } [
167     { 2 4 5 } { 4 6 7 } { 6 8 9 }
168     [ [ odd? ] tri@ and and ] 3 nany?
169 ] unit-test
170
171 { f } [
172     { 1 2 3 } { 4 5 6 } { 7 8 9 }
173     [ [ odd? ] tri@ and and ] 3 nany?
174 ] unit-test