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