talrost 0.1.2

A mathematics library for embedded scientific computation.
Documentation
use crate::natural::Natural;

pub trait Number {
    type Type: Natural;
    fn new(value: Self::Type) -> Self::Type;
}

impl<T: Natural> Number for T {
    type Type = T;
    fn new(value: Self::Type) -> Self::Type {
        value
    }
}

#[cfg(test)]
mod tests {
    use crate::complex::Complex;

    use super::*;

    fn test_numbers_pow2<N: Number + Natural>(n: N, answer: N) {
        assert_eq!(n.powi(2), answer);
    }

    #[test]
    fn test_numbers() {
        let unsigned_32 = 16_u32;
        test_numbers_pow2(unsigned_32, 256_u32);

        let unsigned_64 = 32_u64;
        test_numbers_pow2(unsigned_64, 1024_u64);

        let signed_32 = 64_i32;
        test_numbers_pow2(signed_32, 4096_i32);

        let signed_64 = 128_i64;
        test_numbers_pow2(signed_64, 16384_i64);

        let float_32 = 256_f32;
        test_numbers_pow2(float_32, 65536_f32);

        let float_64 = 512_f64;
        test_numbers_pow2(float_64, 262144_f64);

        let complex_32 = Complex::new(10_f32, 5_f32);
        test_numbers_pow2(complex_32, Complex::new(75_f32, 100_f32));

        let complex_64 = Complex::new(1_f64, 1_f64);
        test_numbers_pow2(complex_64, Complex::new(0_f64, 2_f64));
    }
}