smartcore/numbers/
basenum.rs

1use num_traits::{Bounded, FromPrimitive, Num, NumCast, ToPrimitive};
2use std::fmt::{Debug, Display};
3use std::iter::{Product, Sum};
4use std::ops::{AddAssign, DivAssign, MulAssign, SubAssign};
5
6/// Define a `Number` set that acquires traits from `num_traits` to make available a base trait  
7/// to be used by other usable sets like `FloatNumber`.
8pub trait Number:
9    Num
10    + FromPrimitive
11    + ToPrimitive
12    + Debug
13    + Display
14    + Copy
15    + Sum
16    + Product
17    + AddAssign
18    + SubAssign
19    + MulAssign
20    + DivAssign
21    + Bounded
22    + NumCast
23{
24}
25
26impl Number for f64 {}
27impl Number for f32 {}
28impl Number for i8 {}
29impl Number for i16 {}
30impl Number for i32 {}
31impl Number for i64 {}
32impl Number for u8 {}
33impl Number for u16 {}
34impl Number for u32 {}
35impl Number for u64 {}
36impl Number for usize {}
37
38#[cfg(test)]
39mod tests {
40    use std::str::FromStr;
41
42    #[test]
43    fn i32_from_string() {
44        assert_eq!(i32::from_str("1").unwrap(), 1)
45    }
46
47    #[test]
48    fn i8_from_string() {
49        assert_eq!(i8::from_str("1").unwrap(), 1)
50    }
51}