chela 0.0.2

High-performance Machine Learning, Auto-Differentiation and Tensor Algebra crate for Rust
Documentation
use chela::*;

macro_rules! test_astype_from {
    ($src_ty:ty) => {
        paste::paste! {
            #[test]
            fn [<test_astype_from_1d_ $src_ty>]() {
                let a = NdArray::from([0 as $src_ty, 1 as $src_ty, 2 as $src_ty, 3 as $src_ty, 4 as $src_ty]);

                let expected = NdArray::from([0i8, 1, 2, 3, 4]);
                let result = a.astype::<i8>();
                assert_eq!(expected, result);

                let expected = NdArray::from([0i16, 1, 2, 3, 4]);
                let result = a.astype::<i16>();
                assert_eq!(expected, result);

                let expected = NdArray::from([0i32, 1, 2, 3, 4]);
                let result = a.astype::<i32>();
                assert_eq!(expected, result);

                let expected = NdArray::from([0i64, 1, 2, 3, 4]);
                let result = a.astype::<i64>();
                assert_eq!(expected, result);

                let expected = NdArray::from([0i128, 1, 2, 3, 4]);
                let result = a.astype::<i128>();
                assert_eq!(expected, result);

                let expected = NdArray::from([0u8, 1, 2, 3, 4]);
                let result = a.astype::<u8>();
                assert_eq!(expected, result);

                let expected = NdArray::from([0u16, 1, 2, 3, 4]);
                let result = a.astype::<u16>();
                assert_eq!(expected, result);

                let expected = NdArray::from([0u32, 1, 2, 3, 4]);
                let result = a.astype::<u32>();
                assert_eq!(expected, result);

                let expected = NdArray::from([0u64, 1, 2, 3, 4]);
                let result = a.astype::<u64>();
                assert_eq!(expected, result);

                let expected = NdArray::from([0u128, 1, 2, 3, 4]);
                let result = a.astype::<u128>();
                assert_eq!(expected, result);

                let expected = NdArray::from([0f32, 1.0, 2.0, 3.0, 4.0]);
                let result = a.astype::<f32>();
                assert_eq!(expected, result);

                let expected = NdArray::from([0f64, 1.0, 2.0, 3.0, 4.0]);
                let result = a.astype::<f64>();
                assert_eq!(expected, result);
            }

            #[test]
            fn [<test_astype_from_2d_ $src_ty>]() {
                let a = NdArray::from([[0 as $src_ty, 1 as $src_ty], [2 as $src_ty, 3 as $src_ty]]);

                let expected = NdArray::from([[0i8, 1], [2, 3]]);
                let result = a.astype::<i8>();
                assert_eq!(expected, result);

                let expected = NdArray::from([[0i16, 1], [2, 3]]);
                let result = a.astype::<i16>();
                assert_eq!(expected, result);

                let expected = NdArray::from([[0i32, 1], [2, 3]]);
                let result = a.astype::<i32>();
                assert_eq!(expected, result);

                let expected = NdArray::from([[0i64, 1], [2, 3]]);
                let result = a.astype::<i64>();
                assert_eq!(expected, result);

                let expected = NdArray::from([[0i128, 1], [2, 3]]);
                let result = a.astype::<i128>();
                assert_eq!(expected, result);

                let expected = NdArray::from([[0u8, 1], [2, 3]]);
                let result = a.astype::<u8>();
                assert_eq!(expected, result);

                let expected = NdArray::from([[0u16, 1], [2, 3]]);
                let result = a.astype::<u16>();
                assert_eq!(expected, result);

                let expected = NdArray::from([[0u32, 1], [2, 3]]);
                let result = a.astype::<u32>();
                assert_eq!(expected, result);

                let expected = NdArray::from([[0u64, 1], [2, 3]]);
                let result = a.astype::<u64>();
                assert_eq!(expected, result);

                let expected = NdArray::from([[0u128, 1], [2, 3]]);
                let result = a.astype::<u128>();
                assert_eq!(expected, result);

                let expected = NdArray::from([[0f32, 1.0], [2.0, 3.0]]);
                let result = a.astype::<f32>();
                assert_eq!(expected, result);

                let expected = NdArray::from([[0f64, 1.0], [2.0, 3.0]]);
                let result = a.astype::<f64>();
                assert_eq!(expected, result);
            }
        }
    };
}

macro_rules! generate_astype_tests {
    ($($ty:ty),*) => {
        $( test_astype_from!($ty); )*
    };
}


generate_astype_tests!(
    i8, i16, i32, i64, i128,
    u8, u16, u32, u64, u128,
    f32, f64
);