Skip to content

Commit b29cd98

Browse files
chore: further optimization to comparison function
1 parent 4153c4e commit b29cd98

File tree

1 file changed

+22
-10
lines changed

1 file changed

+22
-10
lines changed

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

Lines changed: 22 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
use itertools::Itertools;
22
use rayon::prelude::*;
3-
use std::{collections::HashMap, process::Command};
3+
use std::collections::{HashMap, HashSet};
4+
use std::process::Command;
45

56
pub const INTRINSIC_DELIMITER: &str = "############";
67
fn runner_command(runner: &str) -> Command {
@@ -56,23 +57,34 @@ pub fn compare_outputs(intrinsic_name_list: &Vec<String>, runner: &str, target:
5657
.to_lowercase()
5758
.replace("-nan", "nan");
5859

59-
let c_output_map = c
60+
let c_output_set = c
6061
.split(INTRINSIC_DELIMITER)
6162
.filter_map(|output| output.trim().split_once("\n"))
62-
.collect::<HashMap<&str, &str>>();
63-
let rust_output_map = rust
63+
.collect::<HashSet<(&str, &str)>>();
64+
let rust_output_set = rust
6465
.split(INTRINSIC_DELIMITER)
6566
.filter_map(|output| output.trim().split_once("\n"))
67+
.collect::<HashSet<(&str, &str)>>();
68+
69+
let intrinsics = rust_output_set
70+
.symmetric_difference(&c_output_set)
71+
.map(|&(x, _)| x)
72+
.collect::<HashSet<&str>>();
73+
74+
let c_output_map = c_output_set
75+
.into_iter()
76+
.filter_map(|(key, value)| intrinsics.get(key).zip(Some(value)))
77+
.map(|(&key, value)| (key, value))
78+
.collect::<HashMap<&str, &str>>();
79+
let rust_output_map = rust_output_set
80+
.into_iter()
81+
.filter_map(|(key, value)| intrinsics.get(key).zip(Some(value)))
82+
.map(|(&key, value)| (key, value))
6683
.collect::<HashMap<&str, &str>>();
6784

68-
let intrinsics = c_output_map
69-
.keys()
70-
.chain(rust_output_map.keys())
71-
.unique()
72-
.collect_vec();
7385
let intrinsics_diff_count = intrinsics
7486
.par_iter()
75-
.filter_map(|&&intrinsic| {
87+
.filter_map(|&intrinsic| {
7688
let c_output = c_output_map.get(intrinsic).unwrap();
7789
let rust_output = rust_output_map.get(intrinsic).unwrap();
7890
if rust_output.eq(c_output) {

0 commit comments

Comments
 (0)