Skip to content

Commit 4c4cefd

Browse files
feat: add equality checks to reduce computation spent on equal outputs
1 parent 290c761 commit 4c4cefd

File tree

1 file changed

+29
-21
lines changed

1 file changed

+29
-21
lines changed

crates/intrinsic-test/src/common/compare.rs

Lines changed: 29 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -11,16 +11,20 @@ fn runner_command(runner: &str) -> Command {
1111
}
1212

1313
pub fn compare_outputs(intrinsic_name_list: &Vec<String>, runner: &str, target: &str) -> bool {
14-
let c = runner_command(runner)
15-
.arg("./intrinsic-test-programs")
16-
.current_dir("c_programs")
17-
.output();
18-
19-
let rust = runner_command(runner)
20-
.arg(format!("./target/{target}/release/intrinsic-test-programs"))
21-
.current_dir("rust_programs")
22-
.output();
23-
14+
let (c, rust) = rayon::join(
15+
|| {
16+
runner_command(runner)
17+
.arg("./intrinsic-test-programs")
18+
.current_dir("c_programs")
19+
.output()
20+
},
21+
|| {
22+
runner_command(runner)
23+
.arg(format!("./target/{target}/release/intrinsic-test-programs"))
24+
.current_dir("rust_programs")
25+
.output()
26+
},
27+
);
2428
let (c, rust) = match (c, rust) {
2529
(Ok(c), Ok(rust)) => (c, rust),
2630
a => panic!("{a:#?}"),
@@ -70,18 +74,22 @@ pub fn compare_outputs(intrinsic_name_list: &Vec<String>, runner: &str, target:
7074
.filter_map(|&&intrinsic| {
7175
let c_output = c_output_map.get(intrinsic).unwrap();
7276
let rust_output = rust_output_map.get(intrinsic).unwrap();
73-
let diff = diff::lines(c_output, rust_output);
74-
let diffs = diff
75-
.into_iter()
76-
.filter_map(|diff| match diff {
77-
diff::Result::Left(_) | diff::Result::Right(_) => Some(diff),
78-
diff::Result::Both(_, _) => None,
79-
})
80-
.collect_vec();
81-
if diffs.len() > 0 {
82-
Some((intrinsic, diffs))
83-
} else {
77+
if rust_output.to_string() == c_output.to_string() {
8478
None
79+
} else {
80+
let diff = diff::lines(c_output, rust_output);
81+
let diffs = diff
82+
.into_iter()
83+
.filter_map(|diff| match diff {
84+
diff::Result::Left(_) | diff::Result::Right(_) => Some(diff),
85+
diff::Result::Both(_, _) => None,
86+
})
87+
.collect_vec();
88+
if diffs.len() > 0 {
89+
Some((intrinsic, diffs))
90+
} else {
91+
None
92+
}
8593
}
8694
})
8795
.inspect(|(intrinsic, diffs)| {

0 commit comments

Comments
 (0)