@@ -120,18 +120,32 @@ fn test_iterator_enumerate() {
120120fn test_iterator_peekable ( ) {
121121 let xs = vec ! [ 0 u, 1 , 2 , 3 , 4 , 5 ] ;
122122 let mut it = xs. iter ( ) . map ( |& x|x) . peekable ( ) ;
123+
124+ assert_eq ! ( it. len( ) , 6 ) ;
123125 assert_eq ! ( it. peek( ) . unwrap( ) , & 0 ) ;
126+ assert_eq ! ( it. len( ) , 6 ) ;
124127 assert_eq ! ( it. next( ) . unwrap( ) , 0 ) ;
128+ assert_eq ! ( it. len( ) , 5 ) ;
125129 assert_eq ! ( it. next( ) . unwrap( ) , 1 ) ;
130+ assert_eq ! ( it. len( ) , 4 ) ;
126131 assert_eq ! ( it. next( ) . unwrap( ) , 2 ) ;
132+ assert_eq ! ( it. len( ) , 3 ) ;
127133 assert_eq ! ( it. peek( ) . unwrap( ) , & 3 ) ;
134+ assert_eq ! ( it. len( ) , 3 ) ;
128135 assert_eq ! ( it. peek( ) . unwrap( ) , & 3 ) ;
136+ assert_eq ! ( it. len( ) , 3 ) ;
129137 assert_eq ! ( it. next( ) . unwrap( ) , 3 ) ;
138+ assert_eq ! ( it. len( ) , 2 ) ;
130139 assert_eq ! ( it. next( ) . unwrap( ) , 4 ) ;
140+ assert_eq ! ( it. len( ) , 1 ) ;
131141 assert_eq ! ( it. peek( ) . unwrap( ) , & 5 ) ;
142+ assert_eq ! ( it. len( ) , 1 ) ;
132143 assert_eq ! ( it. next( ) . unwrap( ) , 5 ) ;
144+ assert_eq ! ( it. len( ) , 0 ) ;
133145 assert ! ( it. peek( ) . is_none( ) ) ;
146+ assert_eq ! ( it. len( ) , 0 ) ;
134147 assert ! ( it. next( ) . is_none( ) ) ;
148+ assert_eq ! ( it. len( ) , 0 ) ;
135149}
136150
137151#[ test]
@@ -166,24 +180,45 @@ fn test_iterator_skip() {
166180 let ys = [ 13 , 15 , 16 , 17 , 19 , 20 , 30 ] ;
167181 let mut it = xs. iter ( ) . skip ( 5 ) ;
168182 let mut i = 0 ;
169- for & x in it {
183+ while let Some ( & x ) = it. next ( ) {
170184 assert_eq ! ( x, ys[ i] ) ;
171185 i += 1 ;
186+ assert_eq ! ( it. len( ) , xs. len( ) -5 -i) ;
172187 }
173188 assert_eq ! ( i, ys. len( ) ) ;
189+ assert_eq ! ( it. len( ) , 0 ) ;
174190}
175191
176192#[ test]
177193fn 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 ] ;
180196 let mut it = xs. iter ( ) . take ( 5 ) ;
181197 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 ( ) {
183216 assert_eq ! ( x, ys[ i] ) ;
184217 i += 1 ;
218+ assert_eq ! ( it. len( ) , 4 -i) ;
185219 }
186220 assert_eq ! ( i, ys. len( ) ) ;
221+ assert_eq ! ( it. len( ) , 0 ) ;
187222}
188223
189224#[ test]
@@ -828,6 +863,24 @@ fn test_repeat() {
828863 assert_eq ! ( it. next( ) , Some ( 42 u) ) ;
829864}
830865
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+
831884#[ bench]
832885fn bench_rposition ( b : & mut Bencher ) {
833886 let it: Vec < uint > = range ( 0 u, 300 ) . collect ( ) ;
0 commit comments