use ha_ndarray::*;
#[test]
fn test_concat() -> Result<(), Error> {
let first = ArrayBuf::new(vec![1, 2, 3], shape![1, 3])?;
let second = ArrayBuf::new(vec![4, 5, 6], shape![1, 3])?;
let concatenated = Array::concat(vec![first, second])?;
assert_eq!(
concatenated.buffer()?.to_slice()?.into_vec(),
vec![1, 2, 3, 4, 5, 6]
);
assert_eq!(concatenated.shape(), &[2, 3]);
Ok(())
}
#[test]
fn test_transpose_concat() -> Result<(), Error> {
let first = ArrayBuf::new(vec![1, 2, 3, 4, 5, 6], shape![2, 3])?;
let second = ArrayBuf::new(vec![7, 8, 9, 10, 11, 12], shape![2, 3])?;
let concatenated = Array::transpose_concat(vec![first, second], 1)?;
assert_eq!(concatenated.shape(), &[2, 6]);
assert_eq!(
concatenated.buffer()?.to_slice()?.into_vec(),
vec![1, 2, 3, 7, 8, 9, 4, 5, 6, 10, 11, 12],
);
Ok(())
}
#[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(())
}