10 #include <tracking/trackFindingCDC/numerics/PlainMatrixUtil.h>
11 #include <tracking/trackFindingCDC/numerics/PlainMatrix.h>
13 #include <tracking/trackFindingCDC/numerics/EigenView.h>
15 #include <gtest/gtest.h>
18 using namespace TrackFindingCDC;
21 TEST(TrackFindingCDCTest, PlainMatrix_zero)
25 PlainMatrix<double, 5, 5> result{{}};
26 for (
int i = 0; i < result.rows(); ++i) {
27 for (
int j = 0; j < result.cols(); ++j) {
28 EXPECT_EQ(0, (result(i, j)));
36 for (
int i = 0; i < result.rows(); ++i) {
37 for (
int j = 0; j < result.cols(); ++j) {
38 EXPECT_EQ(0, (result(i, j)));
45 TEST(TrackFindingCDCTest, PlainMatrix_id)
48 for (
int i = 0; i < result.rows(); ++i) {
49 for (
int j = 0; j < result.cols(); ++j) {
51 EXPECT_EQ(1, (result(i, j)));
53 EXPECT_EQ(0, (result(i, j)));
60 TEST(TrackFindingCDCTest, PlainMatrix_diag)
62 PlainMatrix<double, 5, 1> diagElements{{0, 1, 2, 3, 4}};
65 EXPECT_EQ(5, result.cols());
66 EXPECT_EQ(5, result.rows());
68 for (
int i = 0; i < result.rows(); ++i) {
69 for (
int j = 0; j < result.cols(); ++j) {
71 EXPECT_EQ(i, result(i, j));
73 EXPECT_EQ(0, result(i, j));
80 TEST(TrackFindingCDCTest, PlainMatrix_constant)
83 for (
int i = 0; i < result.rows(); ++i) {
84 for (
int j = 0; j < result.cols(); ++j) {
85 EXPECT_EQ(3, (result(i, j)));
91 TEST(TrackFindingCDCTest, PlainMatrix_aggregate_initialization)
93 auto result = PlainMatrix<double, 2, 1>({ -1.0, 1.0});
94 EXPECT_EQ(-1, result(0, 0));
95 EXPECT_EQ(1, result(1, 0));
98 return PlainMatrix<double, 2, 1>({ -1.0, 1.0});
101 EXPECT_EQ(-1, result2(0, 0));
102 EXPECT_EQ(1, result2(1, 0));
106 TEST(TrackFindingCDCTest, PlainMatrix_vstack)
109 auto a = PlainMatrix<double, 2, 1>({1, 2});
110 auto b = PlainMatrix<double, 3, 1>({3, 4, 5});
114 EXPECT_EQ(1, result.cols());
115 EXPECT_EQ(5, result.rows());
117 EXPECT_EQ(1, result(0, 0));
118 EXPECT_EQ(2, result(1, 0));
119 EXPECT_EQ(3, result(2, 0));
120 EXPECT_EQ(4, result(3, 0));
121 EXPECT_EQ(5, result(4, 0));
124 TEST(TrackFindingCDCTest, PlainMatrix_hstack)
127 auto a = PlainMatrix<double, 2, 1>({1, 2});
128 auto b = PlainMatrix<double, 2, 1>({3, 4});
132 EXPECT_EQ(2, result.cols());
133 EXPECT_EQ(2, result.rows());
135 EXPECT_EQ(1, result(0, 0));
136 EXPECT_EQ(2, result(1, 0));
137 EXPECT_EQ(3, result(0, 1));
138 EXPECT_EQ(4, result(1, 1));
143 TEST(TrackFindingCDCTest, PlainMatrix_blockstack)
146 auto a = PlainMatrix<double, 2, 1>({1, 2});
147 auto b = PlainMatrix<double, 3, 1>({3, 4, 5});
151 EXPECT_EQ(2, result.cols());
152 EXPECT_EQ(5, result.rows());
153 EXPECT_EQ(1, result(0, 0));
154 EXPECT_EQ(2, result(1, 0));
155 EXPECT_EQ(0, result(2, 0));
156 EXPECT_EQ(0, result(3, 0));
157 EXPECT_EQ(0, result(4, 0));
159 EXPECT_EQ(0, result(0, 1));
160 EXPECT_EQ(0, result(1, 1));
161 EXPECT_EQ(3, result(2, 1));
162 EXPECT_EQ(4, result(3, 1));
163 EXPECT_EQ(5, result(4, 1));
166 TEST(TrackFindingCDCTest, PlainMatrix_element_access)
174 EXPECT_EQ(2, a(1, 0));
178 TEST(TrackFindingCDCTest, PlainMatrix_minus)
180 auto a = PlainMatrix<double, 2, 1>({1, 2});
181 auto b = PlainMatrix<double, 2, 1>({2, 3});
184 for (
int i = 0; i < result.rows(); ++i) {
185 for (
int j = 0; j < result.cols(); ++j) {
186 EXPECT_EQ(1 , result(i, j));
191 TEST(TrackFindingCDCTest, PlainMatrix_plus)
193 auto a = PlainMatrix<double, 2, 1>({1, 2});
194 auto b = PlainMatrix<double, 2, 1>({2, 1});
197 for (
int i = 0; i < result.rows(); ++i) {
198 for (
int j = 0; j < result.cols(); ++j) {
199 EXPECT_EQ(3, result(i, j));
204 TEST(TrackFindingCDCTest, PlainMatrix_divide)
206 auto a = PlainMatrix<double, 2, 1>({2, 2});
208 auto result = a / 2.0;
209 for (
int i = 0; i < result.rows(); ++i) {
210 for (
int j = 0; j < result.cols(); ++j) {
211 EXPECT_EQ(1, result(i, j));
217 TEST(TrackFindingCDCTest, PlainMatrix_inverse_divide)
219 auto a = PlainMatrix<double, 2, 1>({2, 2});
221 auto result = 2.0 / a;
222 for (
int i = 0; i < result.rows(); ++i) {
223 for (
int j = 0; j < result.cols(); ++j) {
224 EXPECT_EQ(1, result(i, j));
229 TEST(TrackFindingCDCTest, PlainMatrix_muliplication)
231 auto a = PlainMatrix<double, 2, 1>({2, 2});
232 auto b = PlainMatrix<double, 1, 2>({1.0 / 4.0, 1.0 / 4.0});
236 EXPECT_EQ(1, result.cols());
237 EXPECT_EQ(1, result.rows());
239 EXPECT_EQ(1, result(0, 0));
241 auto result2 = a * b;
243 EXPECT_EQ(2, result2.cols());
244 EXPECT_EQ(2, result2.rows());
246 EXPECT_EQ(1.0 / 2.0, result2(0, 0));
247 EXPECT_EQ(1.0 / 2.0, result2(1, 0));
248 EXPECT_EQ(1.0 / 2.0, result2(0, 1));
249 EXPECT_EQ(1.0 / 2.0, result2(1, 1));
252 TEST(TrackFindingCDCTest, PlainMatrix_block)
254 auto a = PlainMatrix<double, 2, 1>({1, 2});
255 auto b = PlainMatrix<double, 3, 1>({3, 4, 5});
259 auto aNew = result.block<2, 1>(0, 0);
260 auto bNew = result.block<3, 1>(2, 1);
262 EXPECT_TRUE(std::equal(a.data(), a.data() + a.size(), aNew.data()));
263 EXPECT_TRUE(std::equal(b.data(), b.data() + b.size(), bNew.data()));
266 TEST(TrackFindingCDCTest, PlainMatrixEigenMap_mapToEigen)
268 auto a = PlainMatrix<double, 2, 1>({1, 2});
269 auto b = PlainMatrix<double, 3, 1>({3, 4, 5});
272 auto eigenMap = mapToEigen(result);
274 for (
int i = 0; i < result.rows(); ++i) {
275 for (
int j = 0; j < result.cols(); ++j) {
276 EXPECT_EQ(result(i, j) , eigenMap(i, j));
282 EXPECT_EQ(0, eigenMap(0, 0)) <<
"write back test " << 0 <<
", " << 0;
283 EXPECT_EQ(0, result(0, 0)) <<
"write back test " << 0 <<
", " << 0;
285 eigenMap = Eigen::Matrix<double, 5, 2>::Zero();
287 for (
int i = 0; i < result.rows(); ++i) {
288 for (
int j = 0; j < result.cols(); ++j) {
289 EXPECT_EQ(0, result(i, j)) <<
"write back test " << i <<
", " << j;
294 TEST(TrackFindingCDCTest, PlainMatrixEigenMap_output_operator)
296 auto a = PlainMatrix<double, 2, 1>({1, 2});
297 std::stringstream oss;