@@ -100,6 +100,42 @@ 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 ! ( Some ( 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. iter( ) ) . last( ) , Some ( & 60 ) ) ;
126
+ assert_eq ! ( ys. iter( ) . chain( zs. iter( ) ) . last( ) , Some ( & 60 ) ) ;
127
+ assert_eq ! ( zs. iter( ) . chain( zs. iter( ) ) . 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
+ let zs = [ ] ;
135
+ assert_eq ! ( xs. iter( ) . chain( ys. iter( ) ) . count( ) , 10 ) ;
136
+ assert_eq ! ( zs. iter( ) . chain( ys. iter( ) ) . count( ) , 4 ) ;
137
+ }
138
+
103
139
#[ test]
104
140
fn test_filter_map ( ) {
105
141
let it = ( 0 ..) . step_by ( 1 ) . take ( 10 )
@@ -116,6 +152,34 @@ fn test_iterator_enumerate() {
116
152
}
117
153
}
118
154
155
+ #[ test]
156
+ fn test_iterator_enumerate_nth ( ) {
157
+ let xs = [ 0 , 1 , 2 , 3 , 4 , 5 ] ;
158
+ for ( i, & x) in xs. iter ( ) . enumerate ( ) {
159
+ assert_eq ! ( i, x) ;
160
+ }
161
+
162
+ let mut it = xs. iter ( ) . enumerate ( ) ;
163
+ while let Some ( ( i, & x) ) = it. nth ( 0 ) {
164
+ assert_eq ! ( i, x) ;
165
+ }
166
+
167
+ let mut 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 ) . unwrap ( ) ;
173
+ assert_eq ! ( i, x) ;
174
+ assert_eq ! ( i, 3 ) ;
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,59 @@ 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: [ i32 ; 0 ] = [ ] ;
220
+
221
+ assert_eq ! ( xs. iter( ) . peekable( ) . count( ) , 6 ) ;
222
+
223
+ let mut it = xs. iter ( ) . peekable ( ) ;
224
+ assert_eq ! ( it. peek( ) , Some ( &&0 ) ) ;
225
+ assert_eq ! ( it. count( ) , 6 ) ;
226
+
227
+ assert_eq ! ( ys. iter( ) . peekable( ) . count( ) , 1 ) ;
228
+
229
+ let mut it = ys. iter ( ) . peekable ( ) ;
230
+ assert_eq ! ( it. peek( ) , Some ( &&10 ) ) ;
231
+ assert_eq ! ( it. count( ) , 1 ) ;
232
+
233
+ assert_eq ! ( zs. iter( ) . peekable( ) . count( ) , 0 ) ;
234
+
235
+ let mut it = zs. iter ( ) . peekable ( ) ;
236
+ assert_eq ! ( it. peek( ) , None ) ;
237
+
238
+ }
239
+
240
+ #[ test]
241
+ fn test_iterator_peekable_nth ( ) {
242
+ let xs = [ 0 , 1 , 2 , 3 , 4 , 5 ] ;
243
+ let mut it = xs. iter ( ) . peekable ( ) ;
244
+
245
+ assert_eq ! ( it. peek( ) , Some ( &&0 ) ) ;
246
+ assert_eq ! ( it. nth( 0 ) , Some ( & 0 ) ) ;
247
+ assert_eq ! ( it. peek( ) , Some ( &&1 ) ) ;
248
+ assert_eq ! ( it. nth( 1 ) , Some ( & 2 ) ) ;
249
+ assert_eq ! ( it. peek( ) , Some ( &&3 ) ) ;
250
+ assert_eq ! ( it. nth( 2 ) , Some ( & 5 ) ) ;
251
+ assert_eq ! ( it. next( ) , None ) ;
252
+ }
253
+
254
+ #[ test]
255
+ fn test_iterator_peekable_last ( ) {
256
+ let xs = [ 0 , 1 , 2 , 3 , 4 , 5 ] ;
257
+ let ys = [ 0 ] ;
258
+
259
+ let mut it = xs. iter ( ) . peekable ( ) ;
260
+ assert_eq ! ( it. peek( ) , Some ( &&0 ) ) ;
261
+ assert_eq ! ( it. last( ) , Some ( & 5 ) ) ;
262
+
263
+ let mut it = ys. iter ( ) . peekable ( ) ;
264
+ assert_eq ! ( it. peek( ) , Some ( &&0 ) ) ;
265
+ assert_eq ! ( it. last( ) , Some ( & 0 ) ) ;
266
+ }
267
+
151
268
#[ test]
152
269
fn test_iterator_take_while ( ) {
153
270
let xs = [ 0 , 1 , 2 , 3 , 5 , 13 , 15 , 16 , 17 , 19 ] ;
@@ -189,6 +306,49 @@ fn test_iterator_skip() {
189
306
assert_eq ! ( it. len( ) , 0 ) ;
190
307
}
191
308
309
+ #[ test]
310
+ fn test_iterator_skip_nth ( ) {
311
+ let xs = [ 0 , 1 , 2 , 3 , 5 , 13 , 15 , 16 , 17 , 19 , 20 , 30 ] ;
312
+
313
+ let mut it = xs. iter ( ) . skip ( 0 ) ;
314
+ assert_eq ! ( it. nth( 0 ) , Some ( & 0 ) ) ;
315
+ assert_eq ! ( it. nth( 1 ) , Some ( & 2 ) ) ;
316
+
317
+ let mut it = xs. iter ( ) . skip ( 5 ) ;
318
+ assert_eq ! ( it. nth( 0 ) , Some ( & 13 ) ) ;
319
+ assert_eq ! ( it. nth( 1 ) , Some ( & 16 ) ) ;
320
+
321
+ let mut it = xs. iter ( ) . skip ( 12 ) ;
322
+ assert_eq ! ( it. nth( 0 ) , None ) ;
323
+
324
+ }
325
+
326
+ #[ test]
327
+ fn test_iterator_skip_count ( ) {
328
+ let xs = [ 0 , 1 , 2 , 3 , 5 , 13 , 15 , 16 , 17 , 19 , 20 , 30 ] ;
329
+
330
+ assert_eq ! ( xs. iter( ) . skip( 0 ) . count( ) , 12 ) ;
331
+ assert_eq ! ( xs. iter( ) . skip( 1 ) . count( ) , 11 ) ;
332
+ assert_eq ! ( xs. iter( ) . skip( 11 ) . count( ) , 1 ) ;
333
+ assert_eq ! ( xs. iter( ) . skip( 12 ) . count( ) , 0 ) ;
334
+ assert_eq ! ( xs. iter( ) . skip( 13 ) . count( ) , 0 ) ;
335
+ }
336
+
337
+ #[ test]
338
+ fn test_iterator_skip_last ( ) {
339
+ let xs = [ 0 , 1 , 2 , 3 , 5 , 13 , 15 , 16 , 17 , 19 , 20 , 30 ] ;
340
+
341
+ assert_eq ! ( xs. iter( ) . skip( 0 ) . last( ) , Some ( & 30 ) ) ;
342
+ assert_eq ! ( xs. iter( ) . skip( 1 ) . last( ) , Some ( & 30 ) ) ;
343
+ assert_eq ! ( xs. iter( ) . skip( 11 ) . last( ) , Some ( & 30 ) ) ;
344
+ assert_eq ! ( xs. iter( ) . skip( 12 ) . last( ) , None ) ;
345
+ assert_eq ! ( xs. iter( ) . skip( 13 ) . last( ) , None ) ;
346
+
347
+ let mut it = xs. iter ( ) . skip ( 5 ) ;
348
+ assert_eq ! ( it. next( ) , Some ( & 13 ) ) ;
349
+ assert_eq ! ( it. last( ) , Some ( & 30 ) ) ;
350
+ }
351
+
192
352
#[ test]
193
353
fn test_iterator_take ( ) {
194
354
let xs = [ 0 , 1 , 2 , 3 , 5 , 13 , 15 , 16 , 17 , 19 ] ;
@@ -205,6 +365,30 @@ fn test_iterator_take() {
205
365
assert_eq ! ( it. len( ) , 0 ) ;
206
366
}
207
367
368
+ #[ test]
369
+ fn test_iterator_take_nth ( ) {
370
+ let xs = [ 0 , 1 , 2 , 4 , 5 ] ;
371
+ let mut it = xs. iter ( ) ;
372
+ {
373
+ let mut take = it. by_ref ( ) . take ( 3 ) ;
374
+ let mut i = 0 ;
375
+ while let Some ( & x) = take. nth ( 0 ) {
376
+ assert_eq ! ( x, i) ;
377
+ i += 1 ;
378
+ }
379
+ }
380
+ assert_eq ! ( it. nth( 1 ) , Some ( & 5 ) ) ;
381
+ assert_eq ! ( it. nth( 0 ) , None ) ;
382
+
383
+ let xs = [ 0 , 1 , 2 , 3 , 4 ] ;
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,37 @@ 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 it = xs. iter ( ) ;
1072
+
1073
+ assert_eq ! ( it. len( ) , 3 ) ;
1074
+ assert_eq ! ( it. last( ) , Some ( & 2 ) ) ;
1075
+ }
1076
+
1077
+ #[ test]
1078
+ fn test_fuse_count ( ) {
1079
+ let xs = [ 0 , 1 , 2 ] ;
1080
+ let it = xs. iter ( ) ;
1081
+
1082
+ assert_eq ! ( it. len( ) , 3 ) ;
1083
+ assert_eq ! ( it. count( ) , 3 ) ;
1084
+ // Can't check len now because count consumes.
1085
+ }
1086
+
872
1087
#[ bench]
873
1088
fn bench_rposition ( b : & mut Bencher ) {
874
1089
let it: Vec < usize > = ( 0 ..300 ) . collect ( ) ;
0 commit comments