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