@@ -529,11 +529,11 @@ pub trait Iterator<A> {
529
529
/// ```rust
530
530
/// let a = [1, 2, 3, 4, 5];
531
531
/// let mut it = a.iter();
532
- /// assert!(it.len () == 5);
533
- /// assert!(it.len () == 0);
532
+ /// assert!(it.count () == 5);
533
+ /// assert!(it.count () == 0);
534
534
/// ```
535
535
#[ inline]
536
- fn len ( & mut self ) -> uint {
536
+ fn count ( & mut self ) -> uint {
537
537
self . fold ( 0 , |cnt, _x| cnt + 1 )
538
538
}
539
539
@@ -591,16 +591,6 @@ pub trait Iterator<A> {
591
591
None
592
592
}
593
593
594
- /// Count the number of elements satisfying the specified predicate
595
- #[ inline]
596
- fn count ( & mut self , predicate: |A | -> bool) -> uint {
597
- let mut i = 0 ;
598
- for x in * self {
599
- if predicate ( x) { i += 1 }
600
- }
601
- i
602
- }
603
-
604
594
/// Return the element that gives the maximum value from the
605
595
/// specified function.
606
596
///
@@ -738,6 +728,14 @@ pub trait ExactSize<A> : DoubleEndedIterator<A> {
738
728
}
739
729
None
740
730
}
731
+
732
+ #[ inline]
733
+ /// Return the exact length of the iterator.
734
+ fn len ( & self ) -> uint {
735
+ let ( lower, upper) = self . size_hint ( ) ;
736
+ assert ! ( upper == Some ( lower) ) ;
737
+ lower
738
+ }
741
739
}
742
740
743
741
// All adaptors that preserve the size of the wrapped iterator are fine
@@ -2594,9 +2592,9 @@ mod tests {
2594
2592
#[ test]
2595
2593
fn test_iterator_len ( ) {
2596
2594
let v = & [ 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 ] ;
2597
- assert_eq ! ( v. slice( 0 , 4 ) . iter( ) . len ( ) , 4 ) ;
2598
- assert_eq ! ( v. slice( 0 , 10 ) . iter( ) . len ( ) , 10 ) ;
2599
- assert_eq ! ( v. slice( 0 , 0 ) . iter( ) . len ( ) , 0 ) ;
2595
+ assert_eq ! ( v. slice( 0 , 4 ) . iter( ) . count ( ) , 4 ) ;
2596
+ assert_eq ! ( v. slice( 0 , 10 ) . iter( ) . count ( ) , 10 ) ;
2597
+ assert_eq ! ( v. slice( 0 , 0 ) . iter( ) . count ( ) , 0 ) ;
2600
2598
}
2601
2599
2602
2600
#[ test]
@@ -2712,9 +2710,9 @@ mod tests {
2712
2710
#[ test]
2713
2711
fn test_count ( ) {
2714
2712
let xs = & [ 1 , 2 , 2 , 1 , 5 , 9 , 0 , 2 ] ;
2715
- assert_eq ! ( xs. iter( ) . count ( |x| * x == 2 ) , 3 ) ;
2716
- assert_eq ! ( xs. iter( ) . count ( |x| * x == 5 ) , 1 ) ;
2717
- assert_eq ! ( xs. iter( ) . count ( |x| * x == 95 ) , 0 ) ;
2713
+ assert_eq ! ( xs. iter( ) . filter ( |x| * * x == 2 ) . count ( ) , 3 ) ;
2714
+ assert_eq ! ( xs. iter( ) . filter ( |x| * * x == 5 ) . count ( ) , 1 ) ;
2715
+ assert_eq ! ( xs. iter( ) . filter ( |x| * * x == 95 ) . count ( ) , 0 ) ;
2718
2716
}
2719
2717
2720
2718
#[ test]
@@ -3044,10 +3042,10 @@ mod tests {
3044
3042
assert ! ( range( -10 i, -1 ) . collect:: <Vec <int>>( ) ==
3045
3043
vec![ -10 , -9 , -8 , -7 , -6 , -5 , -4 , -3 , -2 ] ) ;
3046
3044
assert ! ( range( 0 i, 5 ) . rev( ) . collect:: <Vec <int>>( ) == vec![ 4 , 3 , 2 , 1 , 0 ] ) ;
3047
- assert_eq ! ( range( 200 , -5 ) . len ( ) , 0 ) ;
3048
- assert_eq ! ( range( 200 , -5 ) . rev( ) . len ( ) , 0 ) ;
3049
- assert_eq ! ( range( 200 , 200 ) . len ( ) , 0 ) ;
3050
- assert_eq ! ( range( 200 , 200 ) . rev( ) . len ( ) , 0 ) ;
3045
+ assert_eq ! ( range( 200 , -5 ) . count ( ) , 0 ) ;
3046
+ assert_eq ! ( range( 200 , -5 ) . rev( ) . count ( ) , 0 ) ;
3047
+ assert_eq ! ( range( 200 , 200 ) . count ( ) , 0 ) ;
3048
+ assert_eq ! ( range( 200 , 200 ) . rev( ) . count ( ) , 0 ) ;
3051
3049
3052
3050
assert_eq ! ( range( 0 i, 100 ) . size_hint( ) , ( 100 , Some ( 100 ) ) ) ;
3053
3051
// this test is only meaningful when sizeof uint < sizeof u64
@@ -3062,8 +3060,8 @@ mod tests {
3062
3060
vec![ 0 i, 1 , 2 , 3 , 4 , 5 ] ) ;
3063
3061
assert ! ( range_inclusive( 0 i, 5 ) . rev( ) . collect:: <Vec <int>>( ) ==
3064
3062
vec![ 5 i, 4 , 3 , 2 , 1 , 0 ] ) ;
3065
- assert_eq ! ( range_inclusive( 200 , -5 ) . len ( ) , 0 ) ;
3066
- assert_eq ! ( range_inclusive( 200 , -5 ) . rev( ) . len ( ) , 0 ) ;
3063
+ assert_eq ! ( range_inclusive( 200 , -5 ) . count ( ) , 0 ) ;
3064
+ assert_eq ! ( range_inclusive( 200 , -5 ) . rev( ) . count ( ) , 0 ) ;
3067
3065
assert ! ( range_inclusive( 200 , 200 ) . collect:: <Vec <int>>( ) == vec![ 200 ] ) ;
3068
3066
assert ! ( range_inclusive( 200 , 200 ) . rev( ) . collect:: <Vec <int>>( ) == vec![ 200 ] ) ;
3069
3067
}
0 commit comments