metrum 1.1.0

Easily work with and compare temeratures in different units
Documentation
use super::Length;

impl PartialEq for Length {
    fn eq(&self, other: &Self) -> bool {
        let mut epsilon: f64 = f64::EPSILON;

        if (self.nanometers - other.nanometers).abs() <= epsilon {
            return true;
        }

        epsilon = if self.nanometers > other.nanometers {
            epsilon * self.nanometers.abs()
        } else {
            epsilon * other.nanometers.abs()
        };

        (self.nanometers - other.nanometers).abs() <= epsilon
    }
}

#[cfg(test)]
mod tests {
    use super::*;

    #[test]
    fn test_equality_1() {
        let l1 = Length::from_m(1.0);
        let l2 = Length::from_km(0.001);
        let l3 = Length::from_mm(1000.0);
        let l4 = Length::from_um(1_000_000.0);
        let l5 = Length::from_nm(1_000_000_000.0);
        let l6 = Length::from_in(39.37007874015748);

        assert_eq!(l1, l2);
        assert_eq!(l1, l3);
        assert_eq!(l1, l4);
        assert_eq!(l1, l5);
        assert_eq!(l1, l6);
    }

    #[test]
    fn test_equality_2() {
        let l1 = Length::from_m(1.0);
        let l2 = Length::from_km(0.001);
        let l3 = Length::from_mm(1000.0);
        let l4 = Length::from_um(1_000_000.0);
        let l5 = Length::from_nm(1_000_000_000.0);
        let l6 = Length::from_in(39.37007874015748);

        assert_eq!(l2, l1);
        assert_eq!(l2, l3);
        assert_eq!(l2, l4);
        assert_eq!(l2, l5);
        assert_eq!(l2, l6);
    }

    #[test]
    fn test_equality_3() {
        let l1 = Length::from_m(1.0);
        let l2 = Length::from_km(0.001);
        let l3 = Length::from_mm(1000.0);
        let l4 = Length::from_um(1_000_000.0);
        let l5 = Length::from_nm(1_000_000_000.0);
        let l6 = Length::from_in(39.37007874015748);

        assert_eq!(l3, l1);
        assert_eq!(l3, l2);
        assert_eq!(l3, l4);
        assert_eq!(l3, l5);
        assert_eq!(l3, l6);
    }

    #[test]
    fn test_equality_4() {
        let l1 = Length::from_m(1.0);
        let l2 = Length::from_km(0.001);
        let l3 = Length::from_mm(1000.0);
        let l4 = Length::from_um(1_000_000.0);
        let l5 = Length::from_nm(1_000_000_000.0);
        let l6 = Length::from_in(39.37007874015748);

        assert_eq!(l4, l1);
        assert_eq!(l4, l2);
        assert_eq!(l4, l3);
        assert_eq!(l4, l5);
        assert_eq!(l4, l6);

        assert_eq!(l6, l5);
    }

    #[test]
    fn test_equality_5() {
        let l1 = Length::from_m(1.0);
        let l2 = Length::from_km(0.001);
        let l3 = Length::from_mm(1000.0);
        let l4 = Length::from_um(1_000_000.0);
        let l5 = Length::from_nm(1_000_000_000.0);
        let l6 = Length::from_in(39.37007874015748);

        assert_eq!(l5, l1);
        assert_eq!(l5, l2);
        assert_eq!(l5, l3);
        assert_eq!(l5, l4);
        assert_eq!(l5, l6);
    }

    #[test]
    fn test_equality_6() {
        let l1 = Length::from_m(1.0);
        let l2 = Length::from_km(0.001);
        let l3 = Length::from_mm(1000.0);
        let l4 = Length::from_um(1_000_000.0);
        let l5 = Length::from_nm(1_000_000_000.0);
        let l6 = Length::from_in(39.37007874015748);

        assert_eq!(l6, l1);
        assert_eq!(l6, l2);
        assert_eq!(l6, l3);
        assert_eq!(l6, l4);
        assert_eq!(l6, l5);
    }
}