traiter/numbers/
unitary.rs

1pub trait Unitary {
2    /// Checks if a number is zero.
3    /// ```
4    /// use traiter::numbers::Unitary;
5    /// /// floating point numbers
6    /// assert!(!Unitary::is_one(-1.0_f32));
7    /// assert!(!Unitary::is_one(0.0_f32));
8    /// assert!(Unitary::is_one(1.0_f32));
9    /// /// signed integers
10    /// assert!(!Unitary::is_one(-1i8));
11    /// assert!(!Unitary::is_one(0i8));
12    /// assert!(Unitary::is_one(1i8));
13    /// /// unsigned integers
14    /// assert!(!Unitary::is_one(0u8));
15    /// assert!(Unitary::is_one(1u8));
16    /// assert!(!Unitary::is_one(2u8));
17    /// ```
18    fn is_one(self) -> bool;
19}
20
21macro_rules! number_unitary_impl {
22    ($($number:ty)*) => ($(
23        impl Unitary for $number {
24            #[inline(always)]
25            fn is_one(self) -> bool {
26                self == (1 as $number)
27            }
28        }
29
30        impl Unitary for &$number {
31            #[inline(always)]
32            fn is_one(self) -> bool {
33                *self == (1 as $number)
34            }
35        }
36    )*)
37}
38
39number_unitary_impl!(
40    f32 f64 i8 i16 i32 i64 i128 isize u8 u16 u32 u64 u128 usize
41);