@@ -945,19 +945,26 @@ fn merge_files(paths: &mut Vec<Box<dyn Read>>, output_path: &Option<PathBuf>) ->
945945///
946946/// A vector of strings (`Vec<String>`) where consecutive empty strings are merged with the nearest non-empty string.
947947///
948+ /// # Examples
949+ ///
950+ /// ```
951+ /// let result = merge_empty_lines(vec!["line1", "line2", "", "", "", "lineN"]);
952+ /// assert_eq!(result, vec!["line1", "line2", " lineN"]);
953+ /// ```
954+ ///
948955fn merge_empty_lines ( vec : Vec < & str > ) -> Vec < String > {
949956 let mut empty_count = 0 ;
950957 let mut result = vec ! [ ] ;
951958
952- for i in 0 .. vec. len ( ) {
953- if vec [ i ] . is_empty ( ) {
959+ for i in vec {
960+ if i . is_empty ( ) {
954961 empty_count += 1 ;
955962 } else if empty_count > 0 {
956963 let spaces = " " . repeat ( empty_count) ;
957- result. push ( format ! ( "{}{}" , spaces, vec [ i ] ) ) ;
964+ result. push ( format ! ( "{}{}" , spaces, i ) ) ;
958965 empty_count = 0 ;
959966 } else {
960- result. push ( vec [ i ] . to_string ( ) ) ;
967+ result. push ( i . to_string ( ) ) ;
961968 }
962969 }
963970
@@ -1029,3 +1036,14 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
10291036
10301037 std:: process:: exit ( exit_code)
10311038}
1039+
1040+ #[ cfg( test) ]
1041+ mod tests {
1042+ use super :: * ;
1043+
1044+ #[ test]
1045+ fn test_merge_empty_lines ( ) {
1046+ let result = merge_empty_lines ( vec ! [ "line1" , "line2" , "" , "" , "" , "lineN" ] ) ;
1047+ assert_eq ! ( result, vec![ "line1" , "line2" , " lineN" ] ) ;
1048+ }
1049+ }
0 commit comments