use speculoos::prelude::*;
const fn fudge_down(value: f64, relative_error: f64) -> f64 {
value * (1.0 - relative_error)
}
const fn fudge_up(value: f64, relative_error: f64) -> f64 {
value * (1.0 + relative_error)
}
pub fn assert_roughly_eq(left: f64, right: f64, allowed_relative_error: f64) {
assert!(allowed_relative_error < 0.5 && allowed_relative_error > 0.0);
assert_that(&left).is_less_than(fudge_up(right, allowed_relative_error));
assert_that(&left).is_greater_than(fudge_down(right, allowed_relative_error));
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn assert_roughly_eq_basic() {
assert_roughly_eq(100.0, 98.0, 0.03);
assert_roughly_eq(100.0, 101.0, 0.03);
}
}