ndarray-npy 0.5.0

.npy and .npz file format support for ndarray
Documentation
use ndarray::prelude::*;
use ndarray_npy::{ReadNpyExt, WriteNpyExt};
use std::io::Cursor;

#[test]
fn write_f64_standard() {
    #[cfg(target_endian = "little")]
    let correct = include_bytes!("example_f64_little_endian_standard.npy");
    #[cfg(target_endian = "big")]
    let correct = include_bytes!("example_f64_big_endian_standard.npy");

    let mut writer = Vec::<u8>::new();
    let mut arr = Array3::<f64>::zeros((2, 3, 4));
    for (i, elem) in arr.iter_mut().enumerate() {
        *elem = i as f64;
    }
    arr.write_npy(&mut writer).unwrap();
    assert_eq!(&correct[..], &writer[..]);
}

#[test]
fn write_f64_fortran() {
    #[cfg(target_endian = "little")]
    let correct = include_bytes!("example_f64_little_endian_fortran.npy");
    #[cfg(target_endian = "big")]
    let correct = include_bytes!("example_f64_big_endian_fortran.npy");

    let mut writer = Vec::<u8>::new();
    let mut arr = Array3::<f64>::zeros((2, 3, 4).f());
    for (i, elem) in arr.iter_mut().enumerate() {
        *elem = i as f64;
    }
    arr.write_npy(&mut writer).unwrap();
    assert_eq!(&correct[..], &writer[..]);
}

#[test]
fn read_f64_standard() {
    let mut correct = Array3::<f64>::zeros((2, 3, 4));
    for (i, elem) in correct.iter_mut().enumerate() {
        *elem = i as f64;
    }
    for &bytes in &[
        &include_bytes!("example_f64_little_endian_standard.npy")[..],
        &include_bytes!("example_f64_big_endian_standard.npy")[..],
    ] {
        let reader = Cursor::new(bytes);
        let arr = Array3::<f64>::read_npy(reader).unwrap();
        assert_eq!(correct, arr);
        assert!(arr.is_standard_layout());
    }
}

#[test]
fn read_f64_fortran() {
    let mut correct = Array3::<f64>::zeros((2, 3, 4).f());
    for (i, elem) in correct.iter_mut().enumerate() {
        *elem = i as f64;
    }
    for &bytes in &[
        &include_bytes!("example_f64_little_endian_fortran.npy")[..],
        &include_bytes!("example_f64_big_endian_fortran.npy")[..],
    ] {
        let reader = Cursor::new(bytes);
        let arr = Array3::<f64>::read_npy(reader).unwrap();
        assert_eq!(correct, arr);
        assert!(arr.t().is_standard_layout());
    }
}

#[test]
fn read_bool() {
    let mut correct = Array3::from_elem((2, 3, 4), false);
    for (i, elem) in correct.iter_mut().enumerate() {
        *elem = (i % 5) % 2 == 0;
    }
    let reader = Cursor::new(&include_bytes!("example_bool_standard.npy")[..]);
    let arr = Array3::<bool>::read_npy(reader).unwrap();
    assert_eq!(correct, arr);
}

#[test]
fn read_bool_bad_value() {
    let reader = Cursor::new(&include_bytes!("example_bool_bad_value.npy")[..]);
    assert!(Array3::<bool>::read_npy(reader).is_err());
}