From 0792ef87893af0946611d45a57e73a63f12dcb9a Mon Sep 17 00:00:00 2001 From: yuki takehara Date: Tue, 13 Mar 2018 03:49:10 +0900 Subject: [PATCH] Merge pull request #11049 from take1014:#10948 * Fix #10948 * Add test code * Fixed build error * Add value zero * eigen: test cleanup --- modules/core/src/lda.cpp | 5 ++++- modules/core/test/test_eigen.cpp | 11 +++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/modules/core/src/lda.cpp b/modules/core/src/lda.cpp index 48b7391805..5acdb24c62 100644 --- a/modules/core/src/lda.cpp +++ b/modules/core/src/lda.cpp @@ -350,6 +350,9 @@ private: // Look for single small sub-diagonal element int l = n1; while (l > low) { + if (norm < FLT_EPSILON) { + break; + } s = std::abs(H[l - 1][l - 1]) + std::abs(H[l][l]); if (s == 0.0) { s = norm; @@ -594,7 +597,7 @@ private: // Backsubstitute to find vectors of upper triangular form - if (norm == 0.0) { + if (norm < FLT_EPSILON) { return; } diff --git a/modules/core/test/test_eigen.cpp b/modules/core/test/test_eigen.cpp index c059311ff3..8a90c6e325 100644 --- a/modules/core/test/test_eigen.cpp +++ b/modules/core/test/test_eigen.cpp @@ -516,4 +516,15 @@ static void testEigen3x3() TEST(Core_EigenNonSymmetric, float3x3) { testEigen3x3(); } TEST(Core_EigenNonSymmetric, double3x3) { testEigen3x3(); } +typedef testing::TestWithParam Core_EigenZero; +TEST_P(Core_EigenZero, double) +{ + int N = GetParam(); + Mat_ srcZero = Mat_::zeros(N, N); + Mat_ expected_eigenvalueZero = Mat_::zeros(N, 1); // 1D Mat + testEigen(srcZero, expected_eigenvalueZero); + testEigen(srcZero, expected_eigenvalueZero, true); +} +INSTANTIATE_TEST_CASE_P(/**/, Core_EigenZero, testing::Values(2, 3, 5)); + }} // namespace -- GitLab