in aws-lc-rs/util/process-criterion-csv.rs [196:247]
fn numerical_string_compare(a: &str, b: &str) -> Ordering {
let mut number_compare = false;
let mut a_num = 0u32;
let mut b_num = 0u32;
for pair in a.chars().into_iter().zip_longest(b.chars().into_iter()) {
match pair {
Both(ac, bc) => {
if ac.is_digit(10) {
if bc.is_digit(10) {
if ac.cmp(&bc).is_eq() {
continue;
}
a_num *= 10;
a_num += ac.to_digit(10).unwrap();
b_num *= 10;
b_num += bc.to_digit(10).unwrap();
number_compare = true;
} else if number_compare {
return Ordering::Greater;
} else {
return ac.cmp(&bc);
}
} else if bc.is_digit(10) {
return if number_compare {
Ordering::Less
} else {
ac.cmp(&bc)
};
} else if number_compare {
return a_num.cmp(&b_num);
} else {
let result = ac.cmp(&bc);
if !result.is_eq() {
return result;
}
}
}
Left(_ac) => {
return Ordering::Greater;
}
Right(_bc) => {
return Ordering::Less;
}
}
}
return if number_compare {
a_num.cmp(&b_num)
} else {
Ordering::Equal
};
}