ha-ndarray 0.3.0

A hardware-accelerated n-dimensional array
Documentation
use ha_ndarray::*;

#[test]
fn test_range() -> Result<(), Error> {
    use rayon::prelude::*;

    let size = 1_000_000;

    let expected = ArrayBuf::new(
        (0..size)
            .into_par_iter()
            .map(|n| n as f32 * 0.5)
            .collect::<Vec<f32>>(),
        shape![size],
    )?;

    let actual = ArrayOp::range(0f32, 500_000f32, shape![1_000_000])?;

    assert!(expected.eq(actual)?.all()?);

    Ok(())
}

#[test]
fn test_random_normal() -> Result<(), Error> {
    let size = 1_000_000;
    let array = ArrayOp::random_normal(size)?;

    assert_eq!(array.as_ref().sum_all()? as usize / size, 0);
    assert!(array.as_ref().gt_scalar(1.)?.any()?);
    assert!(array.lt_scalar(-1.)?.any()?);

    Ok(())
}

#[test]
fn test_random_uniform() -> Result<(), Error> {
    let size = 1_000_000;
    let array = ArrayOp::random_uniform(size)?;

    assert_eq!(array.as_ref().sum_all()? as usize / size, 0);
    assert!(array.as_ref().ge_scalar(-1.)?.all()?);
    assert!(array.le_scalar(1.)?.all()?);

    Ok(())
}