13_resource_limits/
13_resource_limits.rs1use matten::{MattenError, MattenLimits, Tensor};
10
11fn main() {
12 let limits = MattenLimits::default();
14 println!("Default max_dimensions: {}", limits.max_dimensions);
15 println!(
16 "Default max_elements: {} (~{} MiB f64)",
17 limits.max_elements,
18 limits.max_elements * 8 / 1_048_576
19 );
20
21 let t = Tensor::try_zeros(&[100, 100]).unwrap();
23 assert_eq!(t.shape(), &[100, 100]);
24 assert_eq!(t.len(), 10_000);
25 println!("try_zeros([100, 100]): OK, {} elements", t.len());
26
27 let t = Tensor::try_ones(&[50, 20]).unwrap();
28 assert_eq!(t.as_slice().iter().sum::<f64>(), 1000.0);
29 println!("try_ones([50, 20]): OK, sum = {}", t.sum());
30
31 let t = Tensor::try_full(&[10, 10], -1.0).unwrap();
32 assert_eq!(t.as_slice()[0], -1.0);
33 println!("try_full([10, 10], -1.0): OK");
34
35 let tight = MattenLimits {
37 max_elements: 10,
38 ..MattenLimits::default()
39 };
40 let err = Tensor::try_zeros_with_limits(&[100], &tight).unwrap_err();
41 assert!(matches!(err, MattenError::Allocation { .. }));
42 println!("Custom limit (max=10): correctly rejected [100]");
43
44 let _t = Tensor::zeros(&[10, 10]); println!("zeros([10, 10]): OK (panicking form, within limit)");
48
49 println!("done.");
50}