diff --git a/src/lib/matrix/matrix/Matrix.hpp b/src/lib/matrix/matrix/Matrix.hpp index 87134f7f09..e3c60b8dc2 100644 --- a/src/lib/matrix/matrix/Matrix.hpp +++ b/src/lib/matrix/matrix/Matrix.hpp @@ -594,6 +594,21 @@ public: return result; } + + bool isAllFinite() const + { + const Matrix &self = *this; + + for (size_t i = 0; i < M; i++) { + for (size_t j = 0; j < N; j++) { + if (!std::isfinite(self(i, j))) { + return false; + } + } + } + + return true; + } }; template diff --git a/src/lib/matrix/test/MatrixAssignmentTest.cpp b/src/lib/matrix/test/MatrixAssignmentTest.cpp index 04992b5333..29b7f9951d 100644 --- a/src/lib/matrix/test/MatrixAssignmentTest.cpp +++ b/src/lib/matrix/test/MatrixAssignmentTest.cpp @@ -72,6 +72,7 @@ TEST(MatrixAssignmentTest, Assignment) } EXPECT_TRUE(m_nan.isAllNan()); + EXPECT_FALSE(m_nan.isAllFinite()); float data2d[3][3] = { {1, 2, 3}, @@ -87,6 +88,7 @@ TEST(MatrixAssignmentTest, Assignment) } EXPECT_FALSE(m2.isAllNan()); + EXPECT_TRUE(m2.isAllFinite()); float data_times_2[9] = {2, 4, 6, 8, 10, 12, 14, 16, 18}; Matrix3f m3(data_times_2);