1 #include <stan/math/prim.hpp>
2 #include <test/unit/util.hpp>
3 #include <gtest/gtest.h>
4
TEST(MathMatrixPrimMat,diagPreMultiply)5 TEST(MathMatrixPrimMat, diagPreMultiply) {
6 using Eigen::Dynamic;
7 using Eigen::Matrix;
8 using stan::math::diag_pre_multiply;
9 Matrix<double, Dynamic, Dynamic> m(1, 1);
10 m << 3;
11
12 Matrix<double, Dynamic, 1> v(1);
13 v << 9;
14
15 Matrix<double, Dynamic, Dynamic> v_m(1, 1);
16 v_m << 9;
17
18 EXPECT_MATRIX_FLOAT_EQ(v_m * m, diag_pre_multiply(v, m));
19 }
20
TEST(MathMatrixPrimMat,diagPreMultiply2)21 TEST(MathMatrixPrimMat, diagPreMultiply2) {
22 using Eigen::Dynamic;
23 using Eigen::Matrix;
24 using stan::math::diag_pre_multiply;
25 Matrix<double, Dynamic, Dynamic> m(3, 3);
26 m << 1, 2, 3, 4, 5, 6, 7, 8, 9;
27
28 Matrix<double, Dynamic, 1> v(3);
29 v << 1, 2, 3;
30
31 Matrix<double, Dynamic, Dynamic> v_m(3, 3);
32 v_m << 1, 0, 0, 0, 2, 0, 0, 0, 3;
33
34 EXPECT_MATRIX_FLOAT_EQ(v_m * m, diag_pre_multiply(v, m));
35
36 Matrix<double, 1, Dynamic> rv(3);
37 rv << 1, 2, 3;
38 EXPECT_MATRIX_FLOAT_EQ(v_m * m, diag_pre_multiply(rv, m));
39 }
40
TEST(MathMatrixPrimMat,diagPreMultiply3)41 TEST(MathMatrixPrimMat, diagPreMultiply3) {
42 using Eigen::Dynamic;
43 using Eigen::Matrix;
44 using stan::math::diag_pre_multiply;
45 Matrix<double, Dynamic, Dynamic> m(3, 4);
46 m << 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12;
47
48 Matrix<double, Dynamic, 1> v(3);
49 v << 1, 2, 3;
50
51 Matrix<double, Dynamic, Dynamic> v_m(3, 3);
52 v_m << 1, 0, 0, 0, 2, 0, 0, 0, 3;
53
54 EXPECT_MATRIX_FLOAT_EQ(v_m * m, diag_pre_multiply(v, m));
55
56 Matrix<double, 1, Dynamic> rv(3);
57 rv << 1, 2, 3;
58 EXPECT_MATRIX_FLOAT_EQ(v_m * m, diag_pre_multiply(rv, m));
59 }
60
TEST(MathMatrixPrimMat,diagPreMultiplyException)61 TEST(MathMatrixPrimMat, diagPreMultiplyException) {
62 using Eigen::Dynamic;
63 using Eigen::Matrix;
64 using stan::math::diag_pre_multiply;
65 Matrix<double, Dynamic, Dynamic> m(2, 2);
66 m << 2, 3, 4, 5;
67 Matrix<double, Dynamic, 1> v(3);
68 v << 1, 2, 3;
69 EXPECT_THROW(diag_pre_multiply(v, m), std::invalid_argument);
70 }
71
TEST(MathMatrixPrimMat,diagPreMultiplyZero)72 TEST(MathMatrixPrimMat, diagPreMultiplyZero) {
73 using Eigen::Dynamic;
74 using Eigen::Matrix;
75 using stan::math::diag_pre_multiply;
76 Eigen::VectorXd in1(0);
77 Eigen::MatrixXd in2(0, 0);
78 Eigen::MatrixXd in3;
79 Eigen::MatrixXd in4(0, 0);
80 in3 = diag_pre_multiply(in1, in2);
81 EXPECT_EQ(in4, in3);
82 }
83