opensrdk_linear_algebra/macros/
zeros.rs

1use 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}