File tree 2 files changed +28
-0
lines changed
2 files changed +28
-0
lines changed Original file line number Diff line number Diff line change @@ -814,6 +814,14 @@ fn test_iterator_clone() {
814
814
assert ! ( it. clone( ) . zip( it) . all( |( x, y) | x == y) ) ;
815
815
}
816
816
817
+ #[ test]
818
+ fn test_iterator_last ( ) {
819
+ let s = "ศไทย中华Việt Nam" ;
820
+ let mut it = s. chars ( ) ;
821
+ it. next ( ) ;
822
+ assert_eq ! ( it. last( ) , Some ( 'm' ) ) ;
823
+ }
824
+
817
825
#[ test]
818
826
fn test_bytesator ( ) {
819
827
let s = "ศไทย中华Việt Nam" ;
@@ -911,6 +919,14 @@ fn test_char_indices_revator() {
911
919
assert_eq ! ( pos, p. len( ) ) ;
912
920
}
913
921
922
+ #[ test]
923
+ fn test_char_indices_last ( ) {
924
+ let s = "ศไทย中华Việt Nam" ;
925
+ let mut it = s. char_indices ( ) ;
926
+ it. next ( ) ;
927
+ assert_eq ! ( it. last( ) , Some ( ( 27 , 'm' ) ) ) ;
928
+ }
929
+
914
930
#[ test]
915
931
fn test_splitn_char_iterator ( ) {
916
932
let data = "\n Märy häd ä little lämb\n Little lämb\n " ;
Original file line number Diff line number Diff line change @@ -432,6 +432,12 @@ impl<'a> Iterator for Chars<'a> {
432
432
// `isize::MAX` (that's well below `usize::MAX`).
433
433
( ( len + 3 ) / 4 , Some ( len) )
434
434
}
435
+
436
+ #[ inline]
437
+ fn last ( mut self ) -> Option < char > {
438
+ // No need to go through the entire string.
439
+ self . next_back ( )
440
+ }
435
441
}
436
442
437
443
#[ stable( feature = "rust1" , since = "1.0.0" ) ]
@@ -505,6 +511,12 @@ impl<'a> Iterator for CharIndices<'a> {
505
511
fn size_hint ( & self ) -> ( usize , Option < usize > ) {
506
512
self . iter . size_hint ( )
507
513
}
514
+
515
+ #[ inline]
516
+ fn last ( mut self ) -> Option < ( usize , char ) > {
517
+ // No need to go through the entire string.
518
+ self . next_back ( )
519
+ }
508
520
}
509
521
510
522
#[ stable( feature = "rust1" , since = "1.0.0" ) ]
You can’t perform that action at this time.
0 commit comments