EigenPluginsTest.cpp
Go to the documentation of this file.
1 /*
2  * EigenMatrixBaseAddonsTest.cpp
3  *
4  * Created on: Sep 23, 2015
5  * Author: Péter Fankhauser
6  * Institute: ETH Zurich, ANYbotics
7  */
8 
10 
11 // gtest
12 #include <gtest/gtest.h>
13 
14 // Eigen
15 #include <Eigen/Core>
16 
17 using Eigen::Matrix;
18 
19 TEST(EigenMatrixBaseAddons, numberOfFinites)
20 {
21  Eigen::Matrix3f matrix(Eigen::Matrix3f::Ones());
22  matrix(0, 0) = NAN;
23  matrix(1, 0) = NAN;
24  EXPECT_EQ(7, matrix.numberOfFinites());
25 
26  Matrix<double, 13, 10> matrix2;
27  matrix2.setOnes();
28  EXPECT_EQ(matrix2.rows() * matrix2.cols(), matrix2.numberOfFinites());
29 
30  Matrix<double, 13, 10> matrix3;
31  matrix3.setConstant(NAN);
32  matrix3.col(3).setConstant(0.0);
33  EXPECT_EQ(matrix3.rows(), matrix3.numberOfFinites());
34 }
35 
36 TEST(EigenMatrixBaseAddons, sumOfFinites)
37 {
38  Matrix<double, 7, 18> matrix;
39  matrix.setRandom();
40  EXPECT_NEAR(matrix.sum(), matrix.sumOfFinites(), 1e-10);
41  double finiteSum = matrix.sum() - matrix(0, 0) - matrix(1, 2) - matrix(3, 6) - matrix(6, 12);
42  matrix(0, 0) = NAN;
43  matrix(1, 2) = NAN;
44  matrix(3, 6) = NAN;
45  matrix(6, 12) = NAN;
46  EXPECT_NEAR(finiteSum, matrix.sumOfFinites(), 1e-10);
47  matrix.setConstant(NAN);
48  EXPECT_TRUE(std::isnan(matrix.sumOfFinites()));
49  matrix(5, 7) = 1.0;
50  EXPECT_NEAR(1.0, matrix.sumOfFinites(), 1e-10);
51 }
52 
53 TEST(EigenMatrixBaseAddons, meanOfFinites)
54 {
55  Eigen::Matrix3f matrix(Eigen::Matrix3f::Ones());
56  matrix(0, 0) = NAN;
57  matrix(1, 1) = NAN;
58  EXPECT_DOUBLE_EQ(1.0, matrix.meanOfFinites());
59 
60  Matrix<double, 13, 10> matrix2;
61  matrix2.setRandom();
62  EXPECT_NEAR(matrix2.mean(), matrix2.meanOfFinites(), 1e-10);
63 }
64 
65 TEST(EigenMatrixBaseAddons, minCoeffOfFinites)
66 {
67  Matrix<double, 7, 18> matrix;
68  matrix.setRandom();
69  double min = matrix.minCoeff();
70  EXPECT_NEAR(min, matrix.minCoeffOfFinites(), 1e-10);
71 
72  int i;
73  int j;
74  matrix.maxCoeff(&i, &j);
75  matrix(i, j) = NAN;
76  EXPECT_NEAR(min, matrix.minCoeffOfFinites(), 1e-10);
77 
78  matrix.setConstant(NAN);
79  EXPECT_TRUE(std::isnan(matrix.minCoeffOfFinites()));
80  matrix(i, j) = -1.0;
81  EXPECT_NEAR(-1.0, matrix.minCoeffOfFinites(), 1e-10);
82 }
83 
84 TEST(EigenMatrixBaseAddons, maxCoeffOfFinites)
85 {
86  Matrix<double, 7, 18> matrix;
87  matrix.setRandom();
88  double max = matrix.maxCoeff();
89  EXPECT_NEAR(max, matrix.maxCoeffOfFinites(), 1e-10);
90 
91  int i;
92  int j;
93  matrix.minCoeff(&i, &j);
94  matrix(i, j) = NAN;
95  EXPECT_NEAR(max, matrix.maxCoeffOfFinites(), 1e-10);
96 
97  matrix.setConstant(NAN);
98  EXPECT_TRUE(std::isnan(matrix.maxCoeffOfFinites()));
99  matrix(i, j) = -1.0;
100  EXPECT_NEAR(-1.0, matrix.maxCoeffOfFinites(), 1e-10);
101 }
102 
103 TEST(EigenMatrixBaseAddons, clamp)
104 {
105  Eigen::VectorXf vector(Eigen::VectorXf::LinSpaced(9, 1.0, 9.0));
106  Eigen::Matrix3f matrix;
107  matrix << vector.segment(0, 3), vector.segment(3, 3), vector.segment(6, 3);
108  matrix(1, 1) = NAN;
109  matrix = matrix.unaryExpr(grid_map::Clamp<float>(2.1, 7.0));
110  EXPECT_NEAR(2.1, matrix(0, 0), 1e-7);
111  EXPECT_NEAR(2.1, matrix(1, 0), 1e-7);
112  EXPECT_NEAR(3.0, matrix(2, 0), 1e-7);
113  EXPECT_TRUE(std::isnan(matrix(1, 1)));
114  EXPECT_NEAR(7.0, matrix(2, 2), 1e-7);
115 }
Scalar minCoeffOfFinites() const
Eigen::MatrixXf Matrix
Definition: TypeDefs.hpp:16
Scalar maxCoeffOfFinites() const
Scalar sumOfFinites() const
TEST(EigenMatrixBaseAddons, numberOfFinites)
Scalar meanOfFinites() const
Scalar numberOfFinites() const


grid_map_core
Author(s): Péter Fankhauser
autogenerated on Wed Jul 5 2023 02:23:35