Skip to content

Commit 0792ef8

Browse files
take1014alalek
authored andcommitted
Merge pull request opencv#11049 from take1014:opencv#10948
* Fix opencv#10948 * Add test code * Fixed build error * Add value zero * eigen: test cleanup
1 parent 5bf7f09 commit 0792ef8

File tree

2 files changed

+15
-1
lines changed

2 files changed

+15
-1
lines changed

modules/core/src/lda.cpp

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -350,6 +350,9 @@ class EigenvalueDecomposition {
350350
// Look for single small sub-diagonal element
351351
int l = n1;
352352
while (l > low) {
353+
if (norm < FLT_EPSILON) {
354+
break;
355+
}
353356
s = std::abs(H[l - 1][l - 1]) + std::abs(H[l][l]);
354357
if (s == 0.0) {
355358
s = norm;
@@ -594,7 +597,7 @@ class EigenvalueDecomposition {
594597

595598
// Backsubstitute to find vectors of upper triangular form
596599

597-
if (norm == 0.0) {
600+
if (norm < FLT_EPSILON) {
598601
return;
599602
}
600603

modules/core/test/test_eigen.cpp

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -516,4 +516,15 @@ static void testEigen3x3()
516516
TEST(Core_EigenNonSymmetric, float3x3) { testEigen3x3<float>(); }
517517
TEST(Core_EigenNonSymmetric, double3x3) { testEigen3x3<double>(); }
518518

519+
typedef testing::TestWithParam<int> Core_EigenZero;
520+
TEST_P(Core_EigenZero, double)
521+
{
522+
int N = GetParam();
523+
Mat_<double> srcZero = Mat_<double>::zeros(N, N);
524+
Mat_<double> expected_eigenvalueZero = Mat_<double>::zeros(N, 1); // 1D Mat
525+
testEigen(srcZero, expected_eigenvalueZero);
526+
testEigen(srcZero, expected_eigenvalueZero, true);
527+
}
528+
INSTANTIATE_TEST_CASE_P(/**/, Core_EigenZero, testing::Values(2, 3, 5));
529+
519530
}} // namespace

0 commit comments

Comments
 (0)