rustnum 0.1.0

NumPy-style n-dimensional arrays for Rust: one array type, NumPy names, pure Rust.
Documentation
use rustnum as np;
#[test]
fn limits_types_initialization_and_concurrent_returns() {
    const N: usize = 1 << 17;
    const BYTES: usize = N * 8;
    np::memory::set_pool_limit(2 * BYTES);
    np::memory::clear_pool();
    let a = np::full([N], 7f64);
    let pointer = a.as_slice().unwrap().as_ptr();
    drop(a);
    assert_eq!(np::memory::pool_stats().cached_bytes, BYTES);
    let a = np::full([N], 9f64);
    assert_eq!(pointer, a.as_slice().unwrap().as_ptr());
    assert!(a.iter().all(|x| x == 9.));
    assert!(np::memory::pool_stats().hits > 0);
    drop(a);
    let integers = np::full([N], 3i64);
    assert_ne!(
        integers.as_slice().unwrap().as_ptr() as usize,
        pointer as usize
    );
    drop(integers);
    assert_eq!(np::memory::pool_stats().cached_bytes, 2 * BYTES);
    let excess = np::full([2 * N], 1i32);
    drop(excess);
    assert_eq!(np::memory::pool_stats().cached_bytes, 2 * BYTES);
    np::memory::set_pool_limit(BYTES);
    assert_eq!(np::memory::pool_stats().cached_bytes, 0);
    let a = np::full([N], 1f64);
    let b = np::full([N], 2f64);
    drop(a);
    drop(b);
    assert_eq!(np::memory::pool_stats().cached_bytes, BYTES);
    np::memory::clear_pool();
    assert_eq!(np::memory::pool_stats().cached_buffers, 0);
    std::thread::scope(|scope| {
        for _ in 0..4 {
            scope.spawn(|| {
                for _ in 0..4 {
                    let a = np::full([N], 5f64);
                    assert_eq!(a[[N - 1]], 5.);
                }
            });
        }
    });
    assert!(np::memory::pool_stats().cached_bytes <= BYTES);
    np::memory::set_pool_limit(0);
    drop(np::full([N], 1f64));
    assert_eq!(np::memory::pool_stats().cached_bytes, 0);
}