@@ -502,7 +502,7 @@ impl AccumulateLineNum {
502
502
fn line_num ( & mut self , buffer : & [ u8 ] , byte_offset : usize ) -> usize {
503
503
assert ! ( self . last_offset <= byte_offset) ;
504
504
let slice = & buffer[ self . last_offset ..byte_offset] ;
505
- let newlines = slice. lines ( ) . count ( ) ;
505
+ let newlines = slice. find_iter ( b" \n " ) . count ( ) ;
506
506
let line_num = self . line_num + newlines;
507
507
self . line_num = line_num;
508
508
self . last_offset = byte_offset;
@@ -675,6 +675,31 @@ mod test {
675
675
assert_eq ! ( actual, "foo happy world" ) ;
676
676
}
677
677
678
+ #[ test]
679
+ fn test_line_count_first ( ) {
680
+ let mut accum_line_num = AccumulateLineNum :: new ( ) ;
681
+ let line_num = accum_line_num. line_num ( b"hello world" , 6 ) ;
682
+ assert_eq ! ( line_num, 1 ) ;
683
+ }
684
+
685
+ #[ test]
686
+ fn test_line_count_second ( ) {
687
+ let mut accum_line_num = AccumulateLineNum :: new ( ) ;
688
+ let line_num = accum_line_num. line_num ( b"1\n 2\n 3" , 2 ) ;
689
+ assert_eq ! ( line_num, 2 ) ;
690
+ }
691
+
692
+ #[ test]
693
+ fn test_line_count_multiple ( ) {
694
+ let mut accum_line_num = AccumulateLineNum :: new ( ) ;
695
+ let line_num = accum_line_num. line_num ( b"1\n 2\n 3" , 0 ) ;
696
+ assert_eq ! ( line_num, 1 ) ;
697
+ let line_num = accum_line_num. line_num ( b"1\n 2\n 3" , 2 ) ;
698
+ assert_eq ! ( line_num, 2 ) ;
699
+ let line_num = accum_line_num. line_num ( b"1\n 2\n 3" , 4 ) ;
700
+ assert_eq ! ( line_num, 3 ) ;
701
+ }
702
+
678
703
#[ test]
679
704
fn test_extract_line_single_line ( ) {
680
705
let ( line, offset) = extract_line ( b"hello world" , 6 ) ;
0 commit comments