Shared Rust kernels
ported/rank_common
All modules · quoted at commit 9e1884369a67 of DnaCalc/DnaCalc. Comments are the source's own.
rank_eq · 15 lines · calc-func/src/ported/rank_common.rs on GitHubpub fn rank_eq(number: f64, values: &[f64], order: RankOrder) -> Result<f64, WorksheetErrorCode> {
if values.is_empty() {
return Err(WorksheetErrorCode::NA);
}
let matches = values.iter().filter(|value| **value == number).count();
if matches == 0 {
return Err(WorksheetErrorCode::NA);
}
let rank = match order {
RankOrder::Descending => values.iter().filter(|value| **value > number).count() + 1,
RankOrder::Ascending => values.iter().filter(|value| **value < number).count() + 1,
};
Ok(rank as f64)
}
Used by 3 functions.
rank_avg · 5 lines · calc-func/src/ported/rank_common.rs on GitHubpub fn rank_avg(number: f64, values: &[f64], order: RankOrder) -> Result<f64, WorksheetErrorCode> {
let first = rank_eq(number, values, order)?;
let matches = values.iter().filter(|value| **value == number).count() as f64;
Ok(first + (matches - 1.0) / 2.0)
}
Used by 3 functions.