@@ -120,18 +120,32 @@ fn test_iterator_enumerate() {
120
120
fn test_iterator_peekable ( ) {
121
121
let xs = vec ! [ 0 u, 1 , 2 , 3 , 4 , 5 ] ;
122
122
let mut it = xs. iter ( ) . map ( |& x|x) . peekable ( ) ;
123
+
124
+ assert_eq ! ( it. len( ) , 6 ) ;
123
125
assert_eq ! ( it. peek( ) . unwrap( ) , & 0 ) ;
126
+ assert_eq ! ( it. len( ) , 6 ) ;
124
127
assert_eq ! ( it. next( ) . unwrap( ) , 0 ) ;
128
+ assert_eq ! ( it. len( ) , 5 ) ;
125
129
assert_eq ! ( it. next( ) . unwrap( ) , 1 ) ;
130
+ assert_eq ! ( it. len( ) , 4 ) ;
126
131
assert_eq ! ( it. next( ) . unwrap( ) , 2 ) ;
132
+ assert_eq ! ( it. len( ) , 3 ) ;
127
133
assert_eq ! ( it. peek( ) . unwrap( ) , & 3 ) ;
134
+ assert_eq ! ( it. len( ) , 3 ) ;
128
135
assert_eq ! ( it. peek( ) . unwrap( ) , & 3 ) ;
136
+ assert_eq ! ( it. len( ) , 3 ) ;
129
137
assert_eq ! ( it. next( ) . unwrap( ) , 3 ) ;
138
+ assert_eq ! ( it. len( ) , 2 ) ;
130
139
assert_eq ! ( it. next( ) . unwrap( ) , 4 ) ;
140
+ assert_eq ! ( it. len( ) , 1 ) ;
131
141
assert_eq ! ( it. peek( ) . unwrap( ) , & 5 ) ;
142
+ assert_eq ! ( it. len( ) , 1 ) ;
132
143
assert_eq ! ( it. next( ) . unwrap( ) , 5 ) ;
144
+ assert_eq ! ( it. len( ) , 0 ) ;
133
145
assert ! ( it. peek( ) . is_none( ) ) ;
146
+ assert_eq ! ( it. len( ) , 0 ) ;
134
147
assert ! ( it. next( ) . is_none( ) ) ;
148
+ assert_eq ! ( it. len( ) , 0 ) ;
135
149
}
136
150
137
151
#[ test]
@@ -166,24 +180,45 @@ fn test_iterator_skip() {
166
180
let ys = [ 13 , 15 , 16 , 17 , 19 , 20 , 30 ] ;
167
181
let mut it = xs. iter ( ) . skip ( 5 ) ;
168
182
let mut i = 0 ;
169
- for & x in it {
183
+ while let Some ( & x ) = it. next ( ) {
170
184
assert_eq ! ( x, ys[ i] ) ;
171
185
i += 1 ;
186
+ assert_eq ! ( it. len( ) , xs. len( ) -5 -i) ;
172
187
}
173
188
assert_eq ! ( i, ys. len( ) ) ;
189
+ assert_eq ! ( it. len( ) , 0 ) ;
174
190
}
175
191
176
192
#[ test]
177
193
fn test_iterator_take ( ) {
178
- let xs = [ 0 u , 1 , 2 , 3 , 5 , 13 , 15 , 16 , 17 , 19 ] ;
179
- let ys = [ 0 u , 1 , 2 , 3 , 5 ] ;
194
+ let xs = [ 0 us , 1 , 2 , 3 , 5 , 13 , 15 , 16 , 17 , 19 ] ;
195
+ let ys = [ 0 us , 1 , 2 , 3 , 5 ] ;
180
196
let mut it = xs. iter ( ) . take ( 5 ) ;
181
197
let mut i = 0 ;
182
- for & x in it {
198
+ assert_eq ! ( it. len( ) , 5 ) ;
199
+ while let Some ( & x) = it. next ( ) {
200
+ assert_eq ! ( x, ys[ i] ) ;
201
+ i += 1 ;
202
+ assert_eq ! ( it. len( ) , 5 -i) ;
203
+ }
204
+ assert_eq ! ( i, ys. len( ) ) ;
205
+ assert_eq ! ( it. len( ) , 0 ) ;
206
+ }
207
+
208
+ #[ test]
209
+ fn test_iterator_take_short ( ) {
210
+ let xs = [ 0 us, 1 , 2 , 3 ] ;
211
+ let ys = [ 0 us, 1 , 2 , 3 ] ;
212
+ let mut it = xs. iter ( ) . take ( 5 ) ;
213
+ let mut i = 0 ;
214
+ assert_eq ! ( it. len( ) , 4 ) ;
215
+ while let Some ( & x) = it. next ( ) {
183
216
assert_eq ! ( x, ys[ i] ) ;
184
217
i += 1 ;
218
+ assert_eq ! ( it. len( ) , 4 -i) ;
185
219
}
186
220
assert_eq ! ( i, ys. len( ) ) ;
221
+ assert_eq ! ( it. len( ) , 0 ) ;
187
222
}
188
223
189
224
#[ test]
@@ -828,6 +863,24 @@ fn test_repeat() {
828
863
assert_eq ! ( it. next( ) , Some ( 42 u) ) ;
829
864
}
830
865
866
+ #[ test]
867
+ fn test_fuse ( ) {
868
+ let mut it = 0 us..3 ;
869
+ assert_eq ! ( it. len( ) , 3 ) ;
870
+ assert_eq ! ( it. next( ) , Some ( 0 us) ) ;
871
+ assert_eq ! ( it. len( ) , 2 ) ;
872
+ assert_eq ! ( it. next( ) , Some ( 1 us) ) ;
873
+ assert_eq ! ( it. len( ) , 1 ) ;
874
+ assert_eq ! ( it. next( ) , Some ( 2 us) ) ;
875
+ assert_eq ! ( it. len( ) , 0 ) ;
876
+ assert_eq ! ( it. next( ) , None ) ;
877
+ assert_eq ! ( it. len( ) , 0 ) ;
878
+ assert_eq ! ( it. next( ) , None ) ;
879
+ assert_eq ! ( it. len( ) , 0 ) ;
880
+ assert_eq ! ( it. next( ) , None ) ;
881
+ assert_eq ! ( it. len( ) , 0 ) ;
882
+ }
883
+
831
884
#[ bench]
832
885
fn bench_rposition ( b : & mut Bencher ) {
833
886
let it: Vec < uint > = range ( 0 u, 300 ) . collect ( ) ;
0 commit comments