wolfram_expr/
packed_array.rs1use crate::array_buf::{ArrayBuf, ArrayElement};
6use crate::wxf::PackedArrayEnum;
7
8pub type PackedArray = ArrayBuf<PackedArrayEnum>;
12
13impl<T: ArrayElement<PackedArrayEnum>> From<(Vec<usize>, &[T])> for PackedArray {
14 fn from((dims, slice): (Vec<usize>, &[T])) -> Self {
15 PackedArray::from_slice(dims, slice)
16 }
17}
18
19#[cfg(test)]
20mod tests {
21 use super::*;
22 use crate::wxf::NumericArrayEnum;
23 use crate::NumericArrayRead;
24
25 #[test]
26 fn from_slice_basic() {
27 let arr = PackedArray::from_slice::<f64>(vec![2, 2], &[1.0, 2.0, 3.0, 4.0]);
28 assert_eq!(arr.data_type(), PackedArrayEnum::Real64);
29 assert_eq!(arr.dimensions(), &[2, 2]);
30 assert_eq!(arr.element_count(), 4);
31 assert_eq!(
32 arr.try_as_slice::<f64>(),
33 Some([1.0, 2.0, 3.0, 4.0].as_slice())
34 );
35 assert_eq!(arr.try_as_slice::<i32>(), None);
36 }
37
38 #[test]
39 fn bridge_to_numeric_array_read() {
40 let arr = PackedArray::from_slice::<i32>(vec![3], &[10, 20, 30]);
41 assert_eq!(NumericArrayRead::rank(&arr), 1);
42 assert_eq!(NumericArrayRead::byte_count(&arr), 12);
43 assert_eq!(
44 NumericArrayRead::data_type(&arr),
45 NumericArrayEnum::Integer32
46 );
47 }
48}