@@ -947,19 +947,26 @@ fn merge_files(paths: &mut Vec<Box<dyn Read>>, output_path: &Option<PathBuf>) ->
947947///
948948/// A vector of strings (`Vec<String>`) where consecutive empty strings are merged with the nearest non-empty string.
949949///
950+ /// # Examples
951+ ///
952+ /// ```
953+ /// let result = merge_empty_lines(vec!["line1", "line2", "", "", "", "lineN"]);
954+ /// assert_eq!(result, vec!["line1", "line2", " lineN"]);
955+ /// ```
956+ ///
950957fn merge_empty_lines ( vec : Vec < & str > ) -> Vec < String > {
951958 let mut empty_count = 0 ;
952959 let mut result = vec ! [ ] ;
953960
954- for i in 0 .. vec. len ( ) {
955- if vec [ i ] . is_empty ( ) {
961+ for i in vec {
962+ if i . is_empty ( ) {
956963 empty_count += 1 ;
957964 } else if empty_count > 0 {
958965 let spaces = " " . repeat ( empty_count) ;
959- result. push ( format ! ( "{}{}" , spaces, vec [ i ] ) ) ;
966+ result. push ( format ! ( "{}{}" , spaces, i ) ) ;
960967 empty_count = 0 ;
961968 } else {
962- result. push ( vec [ i ] . to_string ( ) ) ;
969+ result. push ( i . to_string ( ) ) ;
963970 }
964971 }
965972
@@ -1031,3 +1038,14 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
10311038
10321039 std:: process:: exit ( exit_code)
10331040}
1041+
1042+ #[ cfg( test) ]
1043+ mod tests {
1044+ use super :: * ;
1045+
1046+ #[ test]
1047+ fn test_merge_empty_lines ( ) {
1048+ let result = merge_empty_lines ( vec ! [ "line1" , "line2" , "" , "" , "" , "lineN" ] ) ;
1049+ assert_eq ! ( result, vec![ "line1" , "line2" , " lineN" ] ) ;
1050+ }
1051+ }
0 commit comments