1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#[cfg(test)]
pub fn assert_float_eq<T: num::Float + std::fmt::Display>(
    f1: T,
    f2: T,
    atol: T,
    rtol: T,
    msg: &str,
) {
    println!("tol {}", atol + rtol * f2.abs());
    println!("d   {}", (f1 - f2).abs());
    if (f1 - f2).abs() >= atol + rtol * f2.abs() {
        println!("Floats not almost equal. {}\nf1: {}\nf2: {}\n", msg, f1, f2);
        unreachable!();
    }
}

#[cfg(test)]
pub fn assert_float_eq_f64(f1: f64, f2: f64) {
    assert_float_eq(f1, f2, 1e-12, 0.0, "");
}