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);