approxeq 0.1.1

A trait for approximate equality of types
Documentation
use super::ApproxEq;

macro_rules! approxeq_impl_abs {
    ($type1:ident, $type2:ident) => {
        impl ApproxEq<$type2> for $type1 {
            fn aeq(&self, other: &$type2) -> bool {
                (self - *other as $type1).abs() <= 2 as _
            }
        }
    };
}

macro_rules! approxeq_impl_no_abs {
    ($type1:ident, $type2:ident) => {
        impl ApproxEq<$type2> for $type1 {
            fn aeq(&self, other: &$type2) -> bool {
                (self - *other as $type1) <= 2
            }
        }
    };
}

macro_rules! approxeq_impl_ints {
    ($type:ident) => {
        approxeq_impl_abs!($type, i8);
        approxeq_impl_abs!($type, i16);
        approxeq_impl_abs!($type, i32);
        approxeq_impl_abs!($type, i64);
        approxeq_impl_abs!($type, i128);
        approxeq_impl_abs!($type, isize);

        approxeq_impl_abs!($type, u8);
        approxeq_impl_abs!($type, u16);
        approxeq_impl_abs!($type, u32);
        approxeq_impl_abs!($type, u64);
        approxeq_impl_abs!($type, u128);
        approxeq_impl_abs!($type, usize);

        approxeq_impl_abs!($type, f32);
        approxeq_impl_abs!($type, f64);
    }
}

macro_rules! approxeq_impl_uints {
    ($type:ident) => {
        approxeq_impl_no_abs!($type, i8);
        approxeq_impl_no_abs!($type, i16);
        approxeq_impl_no_abs!($type, i32);
        approxeq_impl_no_abs!($type, i64);
        approxeq_impl_no_abs!($type, i128);
        approxeq_impl_no_abs!($type, isize);

        approxeq_impl_no_abs!($type, u8);
        approxeq_impl_no_abs!($type, u16);
        approxeq_impl_no_abs!($type, u32);
        approxeq_impl_no_abs!($type, u64);
        approxeq_impl_no_abs!($type, u128);
        approxeq_impl_no_abs!($type, usize);

        approxeq_impl_no_abs!($type, f32);
        approxeq_impl_no_abs!($type, f64);
    }
}

macro_rules! approxeq_impl_floats {
    ($type:ident) => {
        approxeq_impl_abs!(f32, $type);
        approxeq_impl_abs!(f64, $type);
    }
}

approxeq_impl_ints!(i8);
approxeq_impl_ints!(i16);
approxeq_impl_ints!(i32);
approxeq_impl_ints!(i64);
approxeq_impl_ints!(i128);
approxeq_impl_ints!(isize);
approxeq_impl_uints!(u8);
approxeq_impl_uints!(u16);
approxeq_impl_uints!(u32);
approxeq_impl_uints!(u64);
approxeq_impl_uints!(u128);
approxeq_impl_uints!(usize);

approxeq_impl_floats!(i8);
approxeq_impl_floats!(i16);
approxeq_impl_floats!(i32);
approxeq_impl_floats!(i64);
approxeq_impl_floats!(i128);
approxeq_impl_floats!(isize);

approxeq_impl_floats!(u8);
approxeq_impl_floats!(u16);
approxeq_impl_floats!(u32);
approxeq_impl_floats!(u64);
approxeq_impl_floats!(u128);
approxeq_impl_floats!(usize);

approxeq_impl_floats!(f32);
approxeq_impl_floats!(f64);