1 use na::{DMatrix, DVector};
2 
3 #[test]
empty_matrix_mul_vector()4 fn empty_matrix_mul_vector() {
5     // Issue #644
6     let m = DMatrix::<f32>::zeros(8, 0);
7     let v = DVector::<f32>::zeros(0);
8     assert_eq!(m * v, DVector::zeros(8));
9 }
10 
11 #[test]
empty_matrix_mul_matrix()12 fn empty_matrix_mul_matrix() {
13     let m1 = DMatrix::<f32>::zeros(3, 0);
14     let m2 = DMatrix::<f32>::zeros(0, 4);
15     assert_eq!(m1 * m2, DMatrix::zeros(3, 4));
16 
17     // Still works with larger matrices.
18     let m1 = DMatrix::<f32>::zeros(13, 0);
19     let m2 = DMatrix::<f32>::zeros(0, 14);
20     assert_eq!(m1 * m2, DMatrix::zeros(13, 14));
21 }
22 
23 #[test]
empty_matrix_tr_mul_vector()24 fn empty_matrix_tr_mul_vector() {
25     let m = DMatrix::<f32>::zeros(0, 5);
26     let v = DVector::<f32>::zeros(0);
27     assert_eq!(m.tr_mul(&v), DVector::zeros(5));
28 }
29 
30 #[test]
empty_matrix_tr_mul_matrix()31 fn empty_matrix_tr_mul_matrix() {
32     let m1 = DMatrix::<f32>::zeros(0, 3);
33     let m2 = DMatrix::<f32>::zeros(0, 4);
34     assert_eq!(m1.tr_mul(&m2), DMatrix::zeros(3, 4));
35 }
36 
37 #[test]
empty_matrix_gemm()38 fn empty_matrix_gemm() {
39     let mut res = DMatrix::repeat(3, 4, 1.0);
40     let m1 = DMatrix::<f32>::zeros(3, 0);
41     let m2 = DMatrix::<f32>::zeros(0, 4);
42     res.gemm(1.0, &m1, &m2, 0.5);
43     assert_eq!(res, DMatrix::repeat(3, 4, 0.5));
44 
45     // Still works with lager matrices.
46     let mut res = DMatrix::repeat(13, 14, 1.0);
47     let m1 = DMatrix::<f32>::zeros(13, 0);
48     let m2 = DMatrix::<f32>::zeros(0, 14);
49     res.gemm(1.0, &m1, &m2, 0.5);
50     assert_eq!(res, DMatrix::repeat(13, 14, 0.5));
51 }
52 
53 #[test]
empty_matrix_gemm_tr()54 fn empty_matrix_gemm_tr() {
55     let mut res = DMatrix::repeat(3, 4, 1.0);
56     let m1 = DMatrix::<f32>::zeros(0, 3);
57     let m2 = DMatrix::<f32>::zeros(0, 4);
58     res.gemm_tr(1.0, &m1, &m2, 0.5);
59     assert_eq!(res, DMatrix::repeat(3, 4, 0.5));
60 }
61