opensrdk_linear_algebra/macros/
zeros.rs1use crate::{macros::sub_matrix::SubMatrix, number::Number};
2
3#[macro_export]
4macro_rules! zeros {
5 ($e1: expr, $e2: expr) => {{
6 use $crate::macros::zeros::Zeros;
7 Zeros($e1, $e2)
8 }};
9}
10
11pub struct Zeros(pub usize, pub usize);
12
13impl<U: Number> SubMatrix<U> for Zeros {
14 fn size(&self) -> (usize, usize) {
15 (self.0, self.1)
16 }
17
18 fn index(&self, _: usize, _: usize) -> U {
19 U::default()
20 }
21}
22
23#[cfg(test)]
24mod tests {
25 use crate::*;
26 #[test]
27 fn it_works() {
28 let a = mat!(
29 1.0, 0.0;
30 0.0, 1.0
31 );
32 assert_eq!(a[(0, 0)], 1.0);
33 assert_eq!(a[(0, 1)], 0.0);
34 assert_eq!(a[(1, 0)], 0.0);
35 assert_eq!(a[(1, 1)], 1.0);
36
37 let b = mat!(
38 &a, zeros!(2, 2);
39 zeros!(2, 2), &a
40 );
41
42 assert_eq!(b[(0, 0)], 1.0);
43 assert_eq!(b[(0, 1)], 0.0);
44 assert_eq!(b[(3, 0)], 0.0);
45 assert_eq!(b[(3, 3)], 1.0);
46 }
47}