From 17c321617ddbd16b780c031801da86c4f85223c8 Mon Sep 17 00:00:00 2001 From: Jitse Niesen Date: Tue, 27 Sep 2011 14:25:02 +0100 Subject: Fix bug #286: Infinite loop in JacobiSVD with denormals --- test/jacobisvd.cpp | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) (limited to 'test/jacobisvd.cpp') diff --git a/test/jacobisvd.cpp b/test/jacobisvd.cpp index 14c965133..f44e66c94 100644 --- a/test/jacobisvd.cpp +++ b/test/jacobisvd.cpp @@ -244,6 +244,17 @@ void jacobisvd_inf_nan() svd.compute(m, ComputeFullU | ComputeFullV); } +// Regression test for bug 286: JacobiSVD loops indefinitely with some +// matrices containing denormal numbers. +void jacobisvd_bug286() +{ + Matrix2d M; + M << -7.90884e-313, -4.94e-324, + 0, 5.60844e-313; + JacobiSVD svd; + svd.compute(M); // just check we don't loop indefinitely +} + void jacobisvd_preallocate() { Vector3f v(3.f, 2.f, 1.f); @@ -280,8 +291,6 @@ void jacobisvd_preallocate() internal::set_is_malloc_allowed(false); svd2.compute(m, ComputeFullU|ComputeFullV); internal::set_is_malloc_allowed(true); - - } void test_jacobisvd() @@ -336,4 +345,7 @@ void test_jacobisvd() // Check that preallocation avoids subsequent mallocs CALL_SUBTEST_9( jacobisvd_preallocate() ); + + // Regression check for bug 286 + CALL_SUBTEST_2( jacobisvd_bug286() ); } -- cgit v1.2.3