From c1d637433e3b3f9012b226c2c9125c494b470ae6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Antonio=20S=C3=A1nchez?= Date: Tue, 30 Apr 2024 22:28:46 +0000 Subject: [PATCH] Judge unitary-ness relative to scaling. --- test/eigensolver_selfadjoint.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/test/eigensolver_selfadjoint.cpp b/test/eigensolver_selfadjoint.cpp index fc0c8d862..04e727d83 100644 --- a/test/eigensolver_selfadjoint.cpp +++ b/test/eigensolver_selfadjoint.cpp @@ -25,6 +25,7 @@ void selfadjointeigensolver_essential_check(const MatrixType& m) { VERIFY_IS_EQUAL(eiSymm.info(), Success); RealScalar scaling = m.cwiseAbs().maxCoeff(); + RealScalar unitary_error_factor = RealScalar(16); if (scaling < (std::numeric_limits::min)()) { VERIFY(eiSymm.eigenvalues().cwiseAbs().maxCoeff() <= (std::numeric_limits::min)()); @@ -33,7 +34,7 @@ void selfadjointeigensolver_essential_check(const MatrixType& m) { (eiSymm.eigenvectors() * eiSymm.eigenvalues().asDiagonal()) / scaling); } VERIFY_IS_APPROX(m.template selfadjointView().eigenvalues(), eiSymm.eigenvalues()); - VERIFY_IS_UNITARY(eiSymm.eigenvectors()); + VERIFY(eiSymm.eigenvectors().isUnitary(test_precision() * unitary_error_factor)); if (m.cols() <= 4) { SelfAdjointEigenSolver eiDirect; @@ -56,7 +57,7 @@ void selfadjointeigensolver_essential_check(const MatrixType& m) { VERIFY_IS_APPROX(m.template selfadjointView().eigenvalues() / scaling, eiDirect.eigenvalues() / scaling); } - VERIFY_IS_UNITARY(eiDirect.eigenvectors()); + VERIFY(eiDirect.eigenvectors().isUnitary(test_precision() * unitary_error_factor)); } }