matrix-42 0.1.0

A linear algebra library written in Rust with basic matrix and vector operations
Documentation
use matrix::{complex::Complex, Matrix, Vector, C, M, V};

#[test]
fn test_vector_scl() {
    let mut u = V!([2., 3.]);
    let v = 2.;
    u.scl(v);
    assert!(u._d.iter().eq(&[4., 6.]));
}

#[test]
fn test_matrix_scl() {
    let mut u = M!([[1., 2.], [3., 4.]]);
    let v = 2.;
    u.scl(v);
    assert!(u._d.iter().eq(&[2., 4., 6., 8.]));
}

#[test]
fn test_vector_scl_2() {
    for i in 0..20 {
        let size = i;
        let mut v = vec![];
        for i in 0..size {
            v.push(i as f32);
        }
        let mut a = V!(v);
        let b = a.clone();
        a.scl(2.0);
        for i in 0..size {
            assert_eq!(a[i] / 2., b[i], "a[i] and b[i] must equal");
        }
    }
}

#[test]
fn test_scl_complex_vector() {
    let mut u = V!([C!(1., 2.), C!(-1., -3.)]);
    let v = C!(2., 3.);
    u.scl(v);
    assert!(u._d.iter().eq(&[C!(-4., 7.), C!(7., -9.)]));

    u = V!([C!(1., 0.), C!(2., 0.)]);
    let v = C!(2., 3.);
    u.scl(v);
    assert!(u._d.iter().eq(&[C!(2., 3.), C!(4., 6.)]));

    u = V!([C!(1., 0.), C!(2., 0.), C!(3., 0.)]);
    let v = C!(2., 3.);
    u.scl(v);
    assert!(u._d.iter().eq(&[C!(2., 3.), C!(4., 6.), C!(6., 9.)]));
}

#[test]
fn test_scl_complex_matrix() {
    let mut u = M!([[C!(1., 2.), C!(-1., -3.)], [C!(2., 0.), C!(3., 0.)]]);
    let v = C!(2., 3.);
    u.scl(v);
    assert!(u._d.iter().eq(&[
        C!(-4., 7.),
        C!(7., -9.),
        C!(4., 6.),
        C!(6., 9.)
    ]));

    u = M!([[C!(1., 0.), C!(2., 0.)], [C!(3., 0.), C!(4., 0.)]]);
    let v = C!(2., 3.);
    u.scl(v);
    assert!(u._d.iter().eq(&[
        C!(2., 3.),
        C!(4., 6.),
        C!(6., 9.),
        C!(8., 12.)
    ]));

    u = M!([
        [C!(1., 0.), C!(2., 0.), C!(3., 0.)],
        [C!(4., 0.), C!(5., 0.), C!(6., 0.)]
    ]);
    let v = C!(9., 4.);
    u.scl(v);
    assert!(u._d.iter().eq(&[
        C!(9., 4.),
        C!(18., 8.),
        C!(27., 12.),
        C!(36., 16.),
        C!(45., 20.),
        C!(54., 24.)
    ]));
}

#[test]
fn test_scl_complex() {
    for i in 0..20 {
        let size = i;
        let mut v = vec![];
        for i in 0..size {
            v.push(C!(i as f64, (i + 1) as f64));
        }
        let mut a = V!(v);
        let b = a.clone();
        a.scl(C!(2., 3.));
        for i in 0..size {
            assert_eq!(
                b[i],
                a[i] / C!(2., 3.),
                "a[i] and b[i] must equal for i = {}",
                i
            );
        }
    }
}