diff options
author | Gael Guennebaud <g.gael@free.fr> | 2016-07-12 17:19:26 +0200 |
---|---|---|
committer | Gael Guennebaud <g.gael@free.fr> | 2016-07-12 17:19:26 +0200 |
commit | 263993a7b61959111dd39d5e1cbb5ed861263d46 (patch) | |
tree | e23d99715326d8b048ddbb75dbaf0d85b2b29018 /test/svd_common.h | |
parent | 9ab35d8ba49275f58e2093ecb0747ebc73c0c378 (diff) |
Fix test for nearly null input
Diffstat (limited to 'test/svd_common.h')
-rw-r--r-- | test/svd_common.h | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/test/svd_common.h b/test/svd_common.h index 3588eefaa..605d5dfef 100644 --- a/test/svd_common.h +++ b/test/svd_common.h @@ -42,9 +42,14 @@ void svd_check_full(const MatrixType& m, const SvdType& svd) MatrixUType u = svd.matrixU(); MatrixVType v = svd.matrixV(); RealScalar scaling = m.cwiseAbs().maxCoeff(); - if(scaling<=(std::numeric_limits<RealScalar>::min)()) - scaling = RealScalar(1); - VERIFY_IS_APPROX(m/scaling, u * (sigma/scaling) * v.adjoint()); + if(scaling<(std::numeric_limits<RealScalar>::min)()) + { + VERIFY(sigma.cwiseAbs().maxCoeff() <= (std::numeric_limits<RealScalar>::min)()); + } + else + { + VERIFY_IS_APPROX(m/scaling, u * (sigma/scaling) * v.adjoint()); + } VERIFY_IS_UNITARY(u); VERIFY_IS_UNITARY(v); } @@ -336,7 +341,7 @@ void svd_underoverflow() M << value_set(id(0)), value_set(id(1)), value_set(id(2)), value_set(id(3)); svd.compute(M,ComputeFullU|ComputeFullV); CALL_SUBTEST( svd_check_full(M,svd) ); - + id(k)++; if(id(k)>=value_set.size()) { @@ -344,7 +349,7 @@ void svd_underoverflow() id.head(k).setZero(); k=0; } - + } while((id<int(value_set.size())).all()); #if defined __INTEL_COMPILER |