fn main()

in aws-lc-rs/util/process-criterion-csv.rs [288:329]


fn main() {
    let cli = Cli::parse();

    let mut ring_results: HashMap<String, Stats> = HashMap::new();
    let mut aws_results: HashMap<String, Stats> = HashMap::new();

    let contents = fs::read_to_string(&cli.csv_file)
        .expect(&format!("Unable to open file: '{:?}'", &cli.csv_file));

    for line in contents.lines() {
        if line.starts_with("group") {
            continue;
        }
        let components: Vec<&str> = line.split(",").collect();
        assert_eq!(8, components.len());
        let test = components[0].trim();
        let lib = components[1].trim();
        let time = f64::from_str(components[5]).expect(&format!("Unable to parse time: {}", line));
        let iter = u32::from_str(components[7])
            .expect(&format!("Unable to parse iteration count: {}", line));
        let avg = time.div(iter as f64);
        match lib {
            "AWS-LC" => insert_result(test, avg, &mut aws_results),
            "Ring" => insert_result(test, avg, &mut ring_results),
            _ => panic!("Unrecognized library: {}", lib),
        }
    }

    let mut test_keys: Vec<&String> = aws_results.keys().collect();
    test_keys.sort_by(|a, b| numerical_string_compare(a, b));
    let mut handle = io::stdout().lock();
    writeln!(handle, "Test{}", cli.header_line()).unwrap();

    for test in test_keys {
        let aws_stats = aws_results.get(test.as_str()).unwrap().finalize();
        let ring_stats = ring_results.get(test.as_str()).unwrap().finalize();
        write!(handle, "{}", test).unwrap();
        write!(handle, "{}", cli.data_line(&aws_stats, &ring_stats)).unwrap();
        writeln!(handle, "").unwrap();
    }
    drop(handle);
}