1- use super :: cli:: FailureReason ;
21use itertools:: Itertools ;
32use rayon:: prelude:: * ;
43use std:: { collections:: HashMap , process:: Command } ;
@@ -21,20 +20,20 @@ pub fn compare_outputs(intrinsic_name_list: &Vec<String>, runner: &str, target:
2120 . arg ( format ! ( "./target/{target}/release/intrinsic-test-programs" ) )
2221 . current_dir ( "rust_programs" )
2322 . output ( ) ;
24-
23+
2524 let ( c, rust) = match ( c, rust) {
2625 ( Ok ( c) , Ok ( rust) ) => ( c, rust) ,
2726 a => panic ! ( "{a:#?}" ) ,
2827 } ;
29-
28+
3029 if !c. status . success ( ) {
3130 error ! (
3231 "Failed to run C program.\n stdout: {stdout}\n stderr: {stderr}" ,
3332 stdout = std:: str :: from_utf8( & c. stdout) . unwrap_or( "" ) ,
3433 stderr = std:: str :: from_utf8( & c. stderr) . unwrap_or( "" ) ,
3534 ) ;
3635 }
37-
36+
3837 if !rust. status . success ( ) {
3938 error ! (
4039 "Failed to run Rust program.\n stdout: {stdout}\n stderr: {stderr}" ,
@@ -51,38 +50,50 @@ pub fn compare_outputs(intrinsic_name_list: &Vec<String>, runner: &str, target:
5150 . unwrap ( )
5251 . to_lowercase ( )
5352 . replace ( "-nan" , "nan" ) ;
54-
55- let c_output_map = c. split ( "############" )
53+
54+ let c_output_map = c
55+ . split ( "############" )
5656 . filter_map ( |output| output. trim ( ) . split_once ( "\n " ) )
5757 . collect :: < HashMap < & str , & str > > ( ) ;
58- let rust_output_map = rust. split ( "############" )
58+ let rust_output_map = rust
59+ . split ( "############" )
5960 . filter_map ( |output| output. trim ( ) . split_once ( "\n " ) )
6061 . collect :: < HashMap < & str , & str > > ( ) ;
6162
62- let intrinsics = c_output_map. keys ( ) . chain ( rust_output_map. keys ( ) ) . unique ( ) . collect_vec ( ) ;
63+ let intrinsics = c_output_map
64+ . keys ( )
65+ . chain ( rust_output_map. keys ( ) )
66+ . unique ( )
67+ . collect_vec ( ) ;
6368 let intrinsics_diff_count = intrinsics
6469 . par_iter ( )
6570 . filter_map ( |& & intrinsic| {
6671 println ! ( "Difference for intrinsic: {intrinsic}" ) ;
6772 let c_output = c_output_map. get ( intrinsic) . unwrap ( ) ;
6873 let rust_output = rust_output_map. get ( intrinsic) . unwrap ( ) ;
6974 let diff = diff:: lines ( c_output, rust_output) ;
70- let diff_count = diff. into_iter ( ) . filter_map ( |diff| match diff {
71- diff:: Result :: Left ( c) => {
72- println ! ( "C: {c}" ) ;
73- Some ( c)
74- }
75- diff:: Result :: Right ( rust) => {
76- println ! ( "Rust: {rust}" ) ;
77- Some ( rust)
78- }
79- diff:: Result :: Both ( _, _) => None ,
80- } ) . count ( ) ;
75+ let diff_count = diff
76+ . into_iter ( )
77+ . filter_map ( |diff| match diff {
78+ diff:: Result :: Left ( c) => {
79+ println ! ( "C: {c}" ) ;
80+ Some ( c)
81+ }
82+ diff:: Result :: Right ( rust) => {
83+ println ! ( "Rust: {rust}" ) ;
84+ Some ( rust)
85+ }
86+ diff:: Result :: Both ( _, _) => None ,
87+ } )
88+ . count ( ) ;
8189 println ! ( "****************************************************************" ) ;
8290 if diff_count > 0 {
8391 Some ( intrinsic)
84- } else { None }
85- } ) . count ( ) ;
92+ } else {
93+ None
94+ }
95+ } )
96+ . count ( ) ;
8697
8798 println ! (
8899 "{} differences found (tested {} intrinsics)" ,
0 commit comments