wolfram_expr/
numeric_array.rs1use crate::array_buf::ArrayBuf;
6use crate::wxf::NumericArrayEnum;
7
8pub type NumericArray = ArrayBuf<NumericArrayEnum>;
14
15#[cfg(test)]
16mod tests {
17 use super::*;
18 use std::convert::TryFrom;
19
20 #[test]
21 fn wxf_byte_roundtrip() {
22 for byte in [
23 0x00u8, 0x01, 0x02, 0x03, 0x10, 0x11, 0x12, 0x13, 0x22, 0x23, 0x33, 0x34,
24 ] {
25 let dt = NumericArrayEnum::try_from(byte).unwrap();
26 assert_eq!(dt as u8, byte);
27 }
28 assert!(NumericArrayEnum::try_from(0x05u8).is_err());
29 }
30
31 #[test]
32 fn size_in_bytes() {
33 assert_eq!(NumericArrayEnum::Integer8.size_in_bytes(), 1);
34 assert_eq!(NumericArrayEnum::Real64.size_in_bytes(), 8);
35 assert_eq!(NumericArrayEnum::ComplexReal64.size_in_bytes(), 16);
36 assert_eq!(NumericArrayEnum::Integer8 as u8, 0x00);
37 assert_eq!(NumericArrayEnum::Real64 as u8, 0x23);
38 assert_eq!(NumericArrayEnum::ComplexReal64 as u8, 0x34);
39 }
40
41 #[test]
42 fn from_slice_basic() {
43 let arr = NumericArray::from_slice::<i32>(vec![2, 3], &[1, 2, 3, 4, 5, 6]);
44 assert_eq!(arr.data_type(), NumericArrayEnum::Integer32);
45 assert_eq!(arr.dimensions(), &[2, 3]);
46 assert_eq!(arr.element_count(), 6);
47 assert_eq!(arr.byte_count(), 24);
48 assert_eq!(
49 arr.try_as_slice::<i32>(),
50 Some([1, 2, 3, 4, 5, 6].as_slice())
51 );
52 assert_eq!(arr.try_as_slice::<i64>(), None);
53 }
54}