use matten::{MattenError, MattenLimits, Tensor};
fn main() {
let limits = MattenLimits::default();
println!("Default max_dimensions: {}", limits.max_dimensions);
println!(
"Default max_elements: {} (~{} MiB f64)",
limits.max_elements,
limits.max_elements * 8 / 1_048_576
);
let t = Tensor::try_zeros(&[100, 100]).unwrap();
assert_eq!(t.shape(), &[100, 100]);
assert_eq!(t.len(), 10_000);
println!("try_zeros([100, 100]): OK, {} elements", t.len());
let t = Tensor::try_ones(&[50, 20]).unwrap();
assert_eq!(t.as_slice().iter().sum::<f64>(), 1000.0);
println!("try_ones([50, 20]): OK, sum = {}", t.sum());
let t = Tensor::try_full(&[10, 10], -1.0).unwrap();
assert_eq!(t.as_slice()[0], -1.0);
println!("try_full([10, 10], -1.0): OK");
let tight = MattenLimits {
max_elements: 10,
..MattenLimits::default()
};
let err = Tensor::try_zeros_with_limits(&[100], &tight).unwrap_err();
assert!(matches!(err, MattenError::Allocation { .. }));
println!("Custom limit (max=10): correctly rejected [100]");
let _t = Tensor::zeros(&[10, 10]); println!("zeros([10, 10]): OK (panicking form, within limit)");
println!("done.");
}