File tree Expand file tree Collapse file tree 2 files changed +38
-9
lines changed Expand file tree Collapse file tree 2 files changed +38
-9
lines changed Original file line number Diff line number Diff line change @@ -2357,10 +2357,26 @@ fn utf8_char_counts() {
23572357
23582358                    assert ! ( !target. starts_with( " " )  && !target. ends_with( " " ) ) ; 
23592359                    let  expected_count = tmpl_char_count *  repeat; 
2360+ 
23602361                    assert_eq ! ( 
23612362                        expected_count, 
23622363                        target. chars( ) . count( ) , 
2363-                         "wrong count for `{:?}.repeat({})` (padding: `{:?}`)" , 
2364+                         "wrong count for `{:?}.repeat({}).count()` (padding: `{:?}`)" , 
2365+                         tmpl_str, 
2366+                         repeat, 
2367+                         ( pad_start. len( ) ,  pad_end. len( ) ) , 
2368+                     ) ; 
2369+ 
2370+                     // `.advance_by(n)` can also be used to count chars. 
2371+                     let  mut  iter = target. chars ( ) ; 
2372+                     let  remaining = match  iter. advance_by ( usize:: MAX )  { 
2373+                         Ok ( ( ) )  => 0 , 
2374+                         Err ( remaining)  => remaining. get ( ) , 
2375+                     } ; 
2376+                     assert_eq ! ( 
2377+                         expected_count, 
2378+                         usize :: MAX  - remaining, 
2379+                         "wrong count for `{:?}.repeat({}).advance_by(usize::MAX)` (padding: `{:?}`)" , 
23642380                        tmpl_str, 
23652381                        repeat, 
23662382                        ( pad_start. len( ) ,  pad_end. len( ) ) , 
Original file line number Diff line number Diff line change @@ -48,27 +48,40 @@ macro_rules! define_benches {
4848} 
4949
5050define_benches !  { 
51-     fn  case00_libcore ( s:  & str )  { 
52-         libcore ( s) 
51+     fn  case00_chars_count ( s:  & str )  { 
52+         chars_count ( s) 
5353    } 
5454
55-     fn  case01_filter_count_cont_bytes( s:  & str )  { 
55+     fn  case01_chars_advance_by( s:  & str )  { 
56+         chars_advance_by( s) 
57+     } 
58+ 
59+     fn  case02_filter_count_cont_bytes( s:  & str )  { 
5660        filter_count_cont_bytes( s) 
5761    } 
5862
59-     fn  case02_iter_increment ( s:  & str )  { 
60-         iterator_increment ( s) 
63+     fn  case03_iter_chars_increment ( s:  & str )  { 
64+         iter_chars_increment ( s) 
6165    } 
6266
63-     fn  case03_manual_char_len ( s:  & str )  { 
67+     fn  case04_manual_char_len ( s:  & str )  { 
6468        manual_char_len( s) 
6569    } 
6670} 
6771
68- fn  libcore ( s :  & str )  -> usize  { 
72+ fn  chars_count ( s :  & str )  -> usize  { 
6973    s. chars ( ) . count ( ) 
7074} 
7175
76+ fn  chars_advance_by ( s :  & str )  -> usize  { 
77+     let  mut  iter = s. chars ( ) ; 
78+     let  remaining = match  iter. advance_by ( usize:: MAX )  { 
79+         Ok ( ( ) )  => 0 , 
80+         Err ( remaining)  => remaining. get ( ) , 
81+     } ; 
82+     usize:: MAX  - remaining
83+ } 
84+ 
7285#[ inline]  
7386fn  utf8_is_cont_byte ( byte :  u8 )  -> bool  { 
7487    ( byte as  i8 )  < -64 
@@ -78,7 +91,7 @@ fn filter_count_cont_bytes(s: &str) -> usize {
7891    s. as_bytes ( ) . iter ( ) . filter ( |& & byte| !utf8_is_cont_byte ( byte) ) . count ( ) 
7992} 
8093
81- fn  iterator_increment ( s :  & str )  -> usize  { 
94+ fn  iter_chars_increment ( s :  & str )  -> usize  { 
8295    let  mut  c = 0 ; 
8396    for  _ in  s. chars ( )  { 
8497        c += 1 ; 
    
 
   
 
     
   
   
          
     
  
    
     
 
    
      
     
 
     
    You can’t perform that action at this time.
  
 
    
  
     
    
      
        
     
 
       
      
     
   
 
    
    
  
 
  
 
     
    
0 commit comments