rendarray 0.2.0-alpha.8

An N-dimensional array. NOTE: CRATE NAME CHANGED TO `ndarray`. Having package name non equal to crate name ran into many quirks of various tools. Changing the package name is easier for everyone involved! New name is `ndarray`.

extern crate ndarray;

use ndarray::{Array, Dimension};

#[test]
fn broadcast_1()
{
    let a_dim = (2, 4, 2, 2);
    let b_dim = (2, 1, 2, 1);
    let a = Array::linspace(0., 1., a_dim.size()).reshape(a_dim);
    let b = Array::linspace(0., 1., b_dim.size()).reshape(b_dim);
    assert!(b.broadcast(a.dim()).is_some());

    let c_dim = (2, 1);
    let c = Array::linspace(0., 1., c_dim.size()).reshape(c_dim);
    assert!(c.broadcast(1).is_none());
    assert!(c.broadcast(()).is_none());
    assert!(c.broadcast((2, 1)).is_some());
    assert!(c.broadcast((2, 2)).is_some());
    assert!(c.broadcast((32, 2, 1)).is_some());
    assert!(c.broadcast((32, 1, 2)).is_none());

    /* () can be broadcast to anything */
    let z = Array::<f32,_>::zeros(());
    assert!(z.broadcast(()).is_some());
    assert!(z.broadcast(1).is_some());
    assert!(z.broadcast(3).is_some());
    assert!(z.broadcast((7,2,9)).is_some());
}

#[test]
fn test_add()
{
    let a_dim = (2, 4, 2, 2);
    let b_dim = (2, 1, 2, 1);
    let mut a = Array::linspace(0.0, 1., a_dim.size()).reshape(a_dim);
    let b = Array::linspace(0.0, 1., b_dim.size()).reshape(b_dim);
    a.iadd(&b);
    let t = Array::from_elem((), 1.0f32);
    a.iadd(&t);
}

#[test] #[should_panic]
fn test_add_incompat()
{
    let a_dim = (2, 4, 2, 2);
    let mut a = Array::linspace(0.0, 1., a_dim.size()).reshape(a_dim);
    let incompat = Array::from_elem(3, 1.0f32);
    a.iadd(&incompat);
}