@@ -100,6 +100,41 @@ fn test_iterator_chain() {
100
100
assert_eq ! ( i, expected. len( ) ) ;
101
101
}
102
102
103
+ #[ test]
104
+ fn test_iterator_chain_nth ( ) {
105
+ let xs = [ 0 , 1 , 2 , 3 , 4 , 5 ] ;
106
+ let ys = [ 30 , 40 , 50 , 60 ] ;
107
+ let zs = [ ] ;
108
+ let expected = [ 0 , 1 , 2 , 3 , 4 , 5 , 30 , 40 , 50 , 60 ] ;
109
+ for ( i, & x) in expected. iter ( ) . enumerate ( ) {
110
+ assert_eq ! ( x, xs. iter( ) . chain( ys. iter( ) ) . nth( i) ) ;
111
+ }
112
+ assert_eq ! ( zs. iter( ) . chain( xs. iter( ) ) . nth( 0 ) , Some ( & 0 ) ) ;
113
+
114
+ let mut it = xs. iter ( ) . chain ( zs. iter ( ) ) ;
115
+ assert_eq ! ( it. nth( 5 ) , Some ( & 5 ) ) ;
116
+ assert_eq ! ( it. next( ) , None ) ;
117
+ }
118
+
119
+ #[ test]
120
+ fn test_iterator_chain_last ( ) {
121
+ let xs = [ 0 , 1 , 2 , 3 , 4 , 5 ] ;
122
+ let ys = [ 30 , 40 , 50 , 60 ] ;
123
+ let zs = [ ] ;
124
+ assert_eq ! ( xs. iter( ) . chain( ys. iter( ) ) . last( ) , Some ( & 60 ) ) ;
125
+ assert_eq ! ( zs. iter( ) . chain( ys) . last( ) , Some ( & 60 ) ) ;
126
+ assert_eq ! ( ys. iter( ) . chain( zs) . last( ) , Some ( & 60 ) ) ;
127
+ assert_eq ! ( zs. iter( ) . chain( zs) . last( ) , None ) ;
128
+ }
129
+
130
+ #[ test]
131
+ fn test_iterator_chain_count ( ) {
132
+ let xs = [ 0 , 1 , 2 , 3 , 4 , 5 ] ;
133
+ let ys = [ 30 , 40 , 50 , 60 ] ;
134
+ assert_eq ! ( xs. iter( ) . chain( ys) . count( ) , 9 ) ;
135
+ assert_eq ! ( zs. iter( ) . chain( ys) . count( ) , 4 ) ;
136
+ }
137
+
103
138
#[ test]
104
139
fn test_filter_map ( ) {
105
140
let it = ( 0 ..) . step_by ( 1 ) . take ( 10 )
@@ -116,6 +151,35 @@ fn test_iterator_enumerate() {
116
151
}
117
152
}
118
153
154
+ #[ test]
155
+ fn test_iterator_enumerate_nth ( ) {
156
+ let xs = [ 0 , 1 , 2 , 3 , 4 , 5 ] ;
157
+ let it = xs. iter ( ) . enumerate ( ) ;
158
+ for ( i, & x) in it {
159
+ assert_eq ! ( i, x) ;
160
+ }
161
+
162
+ let it = xs. iter ( ) . enumerate ( ) ;
163
+ while let Some ( ( i, & x) ) = it. nth ( 0 ) {
164
+ assert_eq ! ( i, x) ;
165
+ }
166
+
167
+ let it = xs. iter ( ) . enumerate ( ) ;
168
+ while let Some ( ( i, & x) ) = it. nth ( 1 ) {
169
+ assert_eq ! ( i, x) ;
170
+ }
171
+
172
+ let ( i, & x) = xs. iter . enumerate ( ) . nth ( 3 ) ;
173
+ assert_eq ! ( i, x) ;
174
+ assert_eq ! ( i, 4 ) ;
175
+ }
176
+
177
+ #[ test]
178
+ fn test_iterator_enumerate_count ( ) {
179
+ let xs = [ 0 , 1 , 2 , 3 , 4 , 5 ] ;
180
+ assert_eq ! ( xs. iter( ) . count( ) , 6 ) ;
181
+ }
182
+
119
183
#[ test]
120
184
fn test_iterator_peekable ( ) {
121
185
let xs = vec ! [ 0 , 1 , 2 , 3 , 4 , 5 ] ;
@@ -148,6 +212,62 @@ fn test_iterator_peekable() {
148
212
assert_eq ! ( it. len( ) , 0 ) ;
149
213
}
150
214
215
+ #[ test]
216
+ fn test_iterator_peekable_count ( ) {
217
+ let xs = [ 0 , 1 , 2 , 3 , 4 , 5 ] ;
218
+ let ys = [ 10 ] ;
219
+ let zs = [ ] ;
220
+
221
+ assert_eq ! ( xs. iter( ) . peekable( ) . count( ) , 6 ) ;
222
+
223
+ let mut it = xs. iter ( ) . peekable ( ) ;
224
+ assert_eq ! ( it. peek( ) . unwrap( ) , & 0 ) ;
225
+ assert_eq ! ( it. count( ) , 6 ) ;
226
+ assert_eq ! ( it. count( ) , 0 ) ;
227
+
228
+ assert_eq ! ( ys. iter( ) . peekable( ) . count( ) , 1 ) ;
229
+
230
+ let mut it = ys. iter ( ) . peekable ( ) ;
231
+ assert_eq ! ( it. peek( ) . unwrap( ) , & 10 ) ;
232
+ assert_eq ! ( it. count( ) , 1 ) ;
233
+ assert_eq ! ( it. count( ) , 0 ) ;
234
+
235
+ assert_eq ! ( zs. iter( ) . peekable( ) . count( ) , 0 ) ;
236
+
237
+ let mut it = zs. iter ( ) . peekable ( ) ;
238
+ assert_eq ! ( it. peek( ) , None ) ;
239
+ assert_eq ! ( it. count( ) , 0 ) ;
240
+
241
+ }
242
+
243
+ #[ test]
244
+ fn test_iterator_peekable_nth ( ) {
245
+ let xs = [ 0 , 1 , 2 , 3 , 4 , 5 ] ;
246
+ let mut it = xs. iter ( ) . peekable ( ) ;
247
+
248
+ assert_eq ! ( it. peek( ) , Some ( & 0 ) ) ;
249
+ assert_eq ! ( it. nth( 0 ) , Some ( & 0 ) ) ;
250
+ assert_eq ! ( it. peek( ) , Some ( & 1 ) ) ;
251
+ assert_eq ! ( it. nth( 1 ) , Some ( & 2 ) ) ;
252
+ assert_eq ! ( it. peek( ) , Some ( & 3 ) ) ;
253
+ assert_eq ! ( it. nth( 2 ) , Some ( & 5 ) ) ;
254
+ assert_eq ! ( it. next( ) , None ) ;
255
+ }
256
+
257
+ #[ test]
258
+ fn test_iterator_peekable_last ( ) {
259
+ let xs = [ 0 , 1 , 2 , 3 , 4 , 5 ] ;
260
+ let ys = [ 0 ] ;
261
+
262
+ let mut it = xs. iter ( ) . peekable ( ) ;
263
+ assert_eq ! ( it. peek( ) , Some ( & 0 ) ) ;
264
+ assert_eq ! ( it. last( ) , Some ( & 5 ) ) ;
265
+
266
+ let mut it = ys. iter ( ) . peekable ( ) ;
267
+ assert_eq ! ( it. peek( ) , Some ( & 0 ) ) ;
268
+ assert_eq ! ( it. last( ) , Some ( & 0 ) ) ;
269
+ }
270
+
151
271
#[ test]
152
272
fn test_iterator_take_while ( ) {
153
273
let xs = [ 0 , 1 , 2 , 3 , 5 , 13 , 15 , 16 , 17 , 19 ] ;
@@ -189,6 +309,49 @@ fn test_iterator_skip() {
189
309
assert_eq ! ( it. len( ) , 0 ) ;
190
310
}
191
311
312
+ #[ test]
313
+ fn test_iterator_skip_nth ( ) {
314
+ let xs = [ 0 , 1 , 2 , 3 , 5 , 13 , 15 , 16 , 17 , 19 , 20 , 30 ] ;
315
+
316
+ let it = xs. iter ( ) . skip ( 0 ) ;
317
+ assert_eq ! ( it. nth( 0 ) , Some ( & 0 ) ) ;
318
+ assert_eq ! ( it. nth( 1 ) , Some ( & 2 ) ) ;
319
+
320
+ let it = xs. iter ( ) . skip ( 5 ) ;
321
+ assert_eq ! ( it. nth( 0 ) , Some ( & 15 ) ) ;
322
+ assert_eq ! ( it. nth( 1 ) , Some ( & 17 ) ) ;
323
+
324
+ let it = xs. iter ( ) . skip ( 11 ) ;
325
+ assert_eq ! ( it. nth( 0 ) , None ) ;
326
+
327
+ }
328
+
329
+ #[ test]
330
+ fn test_iterator_skip_count ( ) {
331
+ let xs = [ 0 , 1 , 2 , 3 , 5 , 13 , 15 , 16 , 17 , 19 , 20 , 30 ] ;
332
+
333
+ assert_eq ! ( xs. iter( ) . skip( 0 ) . count( ) , 11 ) ;
334
+ assert_eq ! ( xs. iter( ) . skip( 1 ) . count( ) , 10 ) ;
335
+ assert_eq ! ( xs. iter( ) . skip( 10 ) . count( ) , 1 ) ;
336
+ assert_eq ! ( xs. iter( ) . skip( 11 ) . count( ) , 0 ) ;
337
+ assert_eq ! ( xs. iter( ) . skip( 12 ) . count( ) , 0 ) ;
338
+ }
339
+
340
+ #[ test]
341
+ fn test_iterator_skip_last ( ) {
342
+ let xs = [ 0 , 1 , 2 , 3 , 5 , 13 , 15 , 16 , 17 , 19 , 20 , 30 ] ;
343
+
344
+ assert_eq ! ( xs. iter( ) . skip( 0 ) . last( ) , Some ( & 30 ) ) ;
345
+ assert_eq ! ( xs. iter( ) . skip( 1 ) . last( ) , Some ( & 30 ) ) ;
346
+ assert_eq ! ( xs. iter( ) . skip( 10 ) . last( ) , Some ( & 30 ) ) ;
347
+ assert_eq ! ( xs. iter( ) . skip( 11 ) . last( ) , None ) ;
348
+ assert_eq ! ( xs. iter( ) . skip( 12 ) . last( ) , None ) ;
349
+
350
+ let it = xs. iter ( ) . skip ( 5 ) ;
351
+ assert_eq ! ( it. next( ) , Some ( & 13 ) ) ;
352
+ assert_eq ! ( it. last( ) , Some ( & 30 ) ) ;
353
+ }
354
+
192
355
#[ test]
193
356
fn test_iterator_take ( ) {
194
357
let xs = [ 0 , 1 , 2 , 3 , 5 , 13 , 15 , 16 , 17 , 19 ] ;
@@ -205,6 +368,27 @@ fn test_iterator_take() {
205
368
assert_eq ! ( it. len( ) , 0 ) ;
206
369
}
207
370
371
+ #[ test]
372
+ fn test_iterator_take_nth ( ) {
373
+ let xs = [ 0 , 1 , 2 , 4 , 5 ] ;
374
+ let mut it = xs. iter ( ) . take ( 3 ) ;
375
+ let mut i = 0 ;
376
+ while let Some ( & x) = it. nth ( 0 ) {
377
+ assert_eq ! ( x, i) ;
378
+ i += 1 ;
379
+ }
380
+ assert_eq ! ( it. nth( 1 ) , Some ( & 5 ) ) ;
381
+ assert_eq ! ( it. nth( 0 ) , None ) ;
382
+
383
+ let xs = [ 0 , 1 , 2 , 4 , 5 ] ;
384
+ let mut it = xs. iter ( ) . take ( 7 ) ;
385
+ let mut i = 1 ;
386
+ while let Some ( & x) = it. nth ( 1 ) {
387
+ assert_eq ! ( x, i) ;
388
+ i += 2 ;
389
+ }
390
+ }
391
+
208
392
#[ test]
209
393
fn test_iterator_take_short ( ) {
210
394
let xs = [ 0 , 1 , 2 , 3 ] ;
@@ -869,6 +1053,42 @@ fn test_fuse() {
869
1053
assert_eq ! ( it. len( ) , 0 ) ;
870
1054
}
871
1055
1056
+ #[ test]
1057
+ fn test_fuse_nth ( ) {
1058
+ let xs = [ 0 , 1 , 2 ] ;
1059
+ let mut it = xs. iter ( ) ;
1060
+
1061
+ assert_eq ! ( it. len( ) , 3 ) ;
1062
+ assert_eq ! ( it. nth( 2 ) , Some ( & 2 ) ) ;
1063
+ assert_eq ! ( it. len( ) , 0 ) ;
1064
+ assert_eq ! ( it. nth( 2 ) , None ) ;
1065
+ assert_eq ! ( it. len( ) , 0 ) ;
1066
+ }
1067
+
1068
+ #[ test]
1069
+ fn test_fuse_last ( ) {
1070
+ let xs = [ 0 , 1 , 2 ] ;
1071
+ let mut it = xs. iter ( ) ;
1072
+
1073
+ assert_eq ! ( it. len( ) , 3 ) ;
1074
+ assert_eq ! ( it. last( ) , Some ( & 2 ) ) ;
1075
+ assert_eq ! ( it. len( ) , 0 ) ;
1076
+ assert_eq ! ( it. last( ) , None ) ;
1077
+ assert_eq ! ( it. len( ) , 0 ) ;
1078
+ }
1079
+
1080
+ #[ test]
1081
+ fn test_fuse_count ( ) {
1082
+ let xs = [ 0 , 1 , 2 ] ;
1083
+ let mut it = xs. iter ( ) ;
1084
+
1085
+ assert_eq ! ( it. len( ) , 3 ) ;
1086
+ assert_eq ! ( it. count( ) , 3 ) ;
1087
+ assert_eq ! ( it. len( ) , 0 ) ;
1088
+ assert_eq ! ( it. count( ) , 0 ) ;
1089
+ assert_eq ! ( it. len( ) , 0 ) ;
1090
+ }
1091
+
872
1092
#[ bench]
873
1093
fn bench_rposition ( b : & mut Bencher ) {
874
1094
let it: Vec < usize > = ( 0 ..300 ) . collect ( ) ;
0 commit comments