@@ -627,80 +627,72 @@ fn collect_sorted_diffs(file_a: &Path, file_b: &Path) -> (Vec<String>, Vec<Strin
627627 ( only_a, only_b)
628628}
629629
630- /// Show sampled sorted differences: first 5, last 5, and 10 random from middle.
630+ /// Show side-by-side comparison of sorted files at same line positions.
631+ /// Assumes line counts match. Shows first 5, last 5, and 10 random from middle.
631632fn show_first_sorted_diffs ( file_a : & Path , file_b : & Path ) {
632- let ( only_baseline, only_rust) = collect_sorted_diffs ( file_a, file_b) ;
633+ let sorted_baseline = read_sorted_lines ( file_a) ;
634+ let sorted_rust = read_sorted_lines ( file_b) ;
633635
634- if only_baseline. is_empty ( ) && only_rust. is_empty ( ) {
635- println ! ( "No sorted differences found." ) ;
636+ let n = sorted_baseline. len ( ) . min ( sorted_rust. len ( ) ) ;
637+ if n == 0 {
638+ println ! ( "No lines to compare." ) ;
636639 return ;
637640 }
638641
639- println ! ( "\n === SORTED DIFF SUMMARY ===" ) ;
640- println ! ( " Lines only in BASELINE : {}" , only_baseline . len( ) ) ;
641- println ! ( " Lines only in RUST : {}" , only_rust . len( ) ) ;
642+ println ! ( "\n === SORTED SIDE-BY-SIDE COMPARISON ===" ) ;
643+ println ! ( " Baseline lines : {}" , sorted_baseline . len( ) ) ;
644+ println ! ( " Rust lines : {}" , sorted_rust . len( ) ) ;
642645
643- // Show baseline-only samples
644- if !only_baseline. is_empty ( ) {
645- println ! ( "\n --- BASELINE ONLY (first 5, last 5, 10 random middle) ---" ) ;
646- show_sampled_lines ( & only_baseline, "BASELINE" ) ;
647- }
648-
649- // Show rust-only samples
650- if !only_rust. is_empty ( ) {
651- println ! ( "\n --- RUST ONLY (first 5, last 5, 10 random middle) ---" ) ;
652- show_sampled_lines ( & only_rust, "RUST" ) ;
653- }
654- }
655-
656- fn show_sampled_lines ( lines : & [ String ] , label : & str ) {
657- let n = lines. len ( ) ;
658646 let first_n = 5 . min ( n) ;
659647 let last_n = 5 . min ( n) ;
660648
661- // First 5
662- println ! ( "\n First {}:" , first_n) ;
663- for line in lines. iter ( ) . take ( first_n) {
664- println ! ( " {}" , line) ;
649+ // First 5 lines side by side
650+ println ! ( "\n --- FIRST {} LINES (sorted) ---" , first_n) ;
651+ for i in 0 ..first_n {
652+ println ! ( " Line {}:" , i + 1 ) ;
653+ println ! ( " BASELINE: {}" , sorted_baseline[ i] ) ;
654+ println ! ( " RUST: {}" , sorted_rust[ i] ) ;
665655 }
666656
667- if n <= 10 {
668- return ;
669- }
670-
671- // Last 5
672- let last_start = n. saturating_sub ( last_n) ;
673- if last_start > first_n {
674- println ! ( "\n Last {}:" , last_n) ;
675- for line in lines. iter ( ) . skip ( last_start) {
676- println ! ( " {}" , line) ;
657+ // Last 5 lines side by side
658+ if n > 10 {
659+ let last_start = n. saturating_sub ( last_n) ;
660+ println ! ( "\n --- LAST {} LINES (sorted) ---" , last_n) ;
661+ for i in last_start..n {
662+ println ! ( " Line {}:" , i + 1 ) ;
663+ println ! ( " BASELINE: {}" , sorted_baseline[ i] ) ;
664+ println ! ( " RUST: {}" , sorted_rust[ i] ) ;
677665 }
678666 }
679667
680- // 10 random from middle
668+ // 10 random line positions from middle
681669 if n > 10 {
682670 let middle_start = first_n;
683- let middle_end = last_start ;
671+ let middle_end = n . saturating_sub ( last_n ) ;
684672 if middle_end > middle_start {
685- let middle: Vec < _ > = lines[ middle_start..middle_end] . to_vec ( ) ;
686- let sample_count = 10 . min ( middle. len ( ) ) ;
687- if sample_count > 0 {
688- println ! (
689- "\n Random {} from middle ({} label={}):" ,
690- sample_count,
691- middle. len( ) ,
692- label
693- ) ;
694- let mut rng_seed = n as u64 ;
695- let mut indices: Vec < usize > = ( 0 ..middle. len ( ) ) . collect ( ) ;
696- for i in ( 1 ..indices. len ( ) ) . rev ( ) {
697- rng_seed = rng_seed. wrapping_mul ( 6364136223846793005 ) . wrapping_add ( 1 ) ;
698- let j = ( rng_seed as usize ) % ( i + 1 ) ;
699- indices. swap ( i, j) ;
700- }
701- for & idx in indices. iter ( ) . take ( sample_count) {
702- println ! ( " {}" , middle[ idx] ) ;
703- }
673+ let middle_count = middle_end - middle_start;
674+ let sample_count = 10 . min ( middle_count) ;
675+
676+ println ! (
677+ "\n --- {} RANDOM LINES FROM MIDDLE (sorted, lines {}-{}) ---" ,
678+ sample_count,
679+ middle_start + 1 ,
680+ middle_end
681+ ) ;
682+
683+ // Deterministic shuffle using LCG
684+ let mut rng_seed = n as u64 ;
685+ let mut indices: Vec < usize > = ( middle_start..middle_end) . collect ( ) ;
686+ for i in ( 1 ..indices. len ( ) ) . rev ( ) {
687+ rng_seed = rng_seed. wrapping_mul ( 6364136223846793005 ) . wrapping_add ( 1 ) ;
688+ let j = ( rng_seed as usize ) % ( i + 1 ) ;
689+ indices. swap ( i, j) ;
690+ }
691+
692+ for & idx in indices. iter ( ) . take ( sample_count) {
693+ println ! ( " Line {}:" , idx + 1 ) ;
694+ println ! ( " BASELINE: {}" , sorted_baseline[ idx] ) ;
695+ println ! ( " RUST: {}" , sorted_rust[ idx] ) ;
704696 }
705697 }
706698 }
0 commit comments