|
| 1 | +//! .npz examples. |
| 2 | +
|
| 3 | +use ndarray::{array, Array2}; |
| 4 | +use ndarray_npy::{NpzReader, NpzWriter}; |
| 5 | +use std::{error::Error, io::Cursor}; |
| 6 | + |
| 7 | +#[test] |
| 8 | +fn round_trip_npz() -> Result<(), Box<dyn Error>> { |
| 9 | + let mut buf = Vec::<u8>::new(); |
| 10 | + |
| 11 | + let arr1 = array![[1i32, 3, 0], [4, 7, -1]]; |
| 12 | + let arr2 = array![[9i32, 6], [-5, 2], [3, -1]]; |
| 13 | + |
| 14 | + { |
| 15 | + let mut writer = NpzWriter::new(Cursor::new(&mut buf)); |
| 16 | + writer.add_array("arr1", &arr1)?; |
| 17 | + writer.add_array("arr2", &arr2)?; |
| 18 | + writer.finish()?; |
| 19 | + } |
| 20 | + |
| 21 | + { |
| 22 | + let mut reader = NpzReader::new(Cursor::new(&buf))?; |
| 23 | + assert!(!reader.is_empty()); |
| 24 | + assert_eq!(reader.len(), 2); |
| 25 | + assert_eq!( |
| 26 | + reader.names()?, |
| 27 | + vec!["arr1".to_string(), "arr2".to_string()], |
| 28 | + ); |
| 29 | + { |
| 30 | + let by_name: Array2<i32> = reader.by_name("arr1")?; |
| 31 | + assert_eq!(by_name, arr1); |
| 32 | + } |
| 33 | + { |
| 34 | + let by_name: Array2<i32> = reader.by_name("arr1.npy")?; |
| 35 | + assert_eq!(by_name, arr1); |
| 36 | + } |
| 37 | + { |
| 38 | + let by_name: Array2<i32> = reader.by_name("arr2")?; |
| 39 | + assert_eq!(by_name, arr2); |
| 40 | + } |
| 41 | + { |
| 42 | + let by_name: Array2<i32> = reader.by_name("arr2.npy")?; |
| 43 | + assert_eq!(by_name, arr2); |
| 44 | + } |
| 45 | + { |
| 46 | + let res: Result<Array2<i32>, _> = reader.by_name("arr1.npy.npy"); |
| 47 | + assert!(res.is_err()); |
| 48 | + } |
| 49 | + } |
| 50 | + |
| 51 | + Ok(()) |
| 52 | +} |
0 commit comments