#[cfg(feature = "memory_efficient")]
mod tests {
use scirs2_core::memory_efficient::{evaluate, LazyArray, LazyOp, LazyOpKind};
use scirs2_core::ndarray::Array1;
#[test]
fn test_lazy_array_creation() {
let data = Array1::from_vec(vec![1.0, 2.0, 3.0, 4.0, 5.0]);
let lazy = LazyArray::new(data.clone());
assert_eq!(lazy.shape, data.shape());
assert!(lazy.concrete_data.is_some());
assert!(lazy.ops.is_empty());
}
#[test]
fn test_lazy_array_withshape() {
let shape = vec![3, 4];
let lazy = LazyArray::<f64, ndarray::Dim<[usize; 2]>>::withshape(shape.clone());
assert_eq!(lazy.shape, shape);
assert!(lazy.concrete_data.is_none());
assert!(lazy.ops.is_empty());
}
#[test]
fn test_lazy_array_evaluate() {
let data = Array1::from_vec(vec![1.0, 2.0, 3.0, 4.0, 5.0]);
let lazy = LazyArray::new(data.clone());
let result = evaluate(&lazy).expect("Test: operation failed");
assert_eq!(result, data);
}
#[test]
fn test_lazy_array_map() {
let data = Array1::from_vec(vec![1.0, 2.0, 3.0, 4.0, 5.0]);
let lazy = LazyArray::new(data.clone());
let lazy_map = lazy.map(|&x| x * x);
assert_eq!(lazy_map.shape, data.shape());
assert_eq!(lazy_map.ops.len(), 1);
assert_eq!(lazy_map.sources.len(), 1);
}
#[test]
fn test_lazy_op_display() {
let op = LazyOp {
kind: LazyOpKind::Unary,
op: std::rc::Rc::new(Box::new(|&x: &f64| x * x) as Box<dyn std::any::Any>),
data: None,
};
let display = format!("{}", op);
assert!(display.contains("Unary"));
let shape = vec![2, 3];
let op = LazyOp {
kind: LazyOpKind::Reshape,
op: std::rc::Rc::new(Box::new(()) as Box<dyn std::any::Any>),
data: Some(std::rc::Rc::new(shape.clone())),
};
let display = format!("{}", op);
assert!(display.contains("Reshape"));
}
#[test]
fn test_lazy_array_debug() {
let data = Array1::from_vec(vec![1.0, 2.0, 3.0, 4.0, 5.0]);
let lazy = LazyArray::new(data.clone());
let debug = format!("{:?}", lazy);
assert!(debug.contains("LazyArray"));
assert!(debug.contains("shape"));
assert!(debug.contains("has_data: true"));
}
}