diff options
-rw-r--r-- | Eigen/src/Eigenvalues/SelfAdjointEigenSolver.h | 2 | ||||
-rw-r--r-- | test/eigensolver_complex.cpp | 6 | ||||
-rw-r--r-- | test/eigensolver_generalized_real.cpp | 8 | ||||
-rw-r--r-- | test/eigensolver_generic.cpp | 6 | ||||
-rw-r--r-- | test/eigensolver_selfadjoint.cpp | 6 |
5 files changed, 27 insertions, 1 deletions
diff --git a/Eigen/src/Eigenvalues/SelfAdjointEigenSolver.h b/Eigen/src/Eigenvalues/SelfAdjointEigenSolver.h index 4d62708ad..c64555096 100644 --- a/Eigen/src/Eigenvalues/SelfAdjointEigenSolver.h +++ b/Eigen/src/Eigenvalues/SelfAdjointEigenSolver.h @@ -411,7 +411,7 @@ SelfAdjointEigenSolver<MatrixType>& SelfAdjointEigenSolver<MatrixType> if(n==1) { - m_eivalues.coeffRef(0,0) = numext::real(matrix.coeff(0,0)); + m_eivalues.coeffRef(0,0) = numext::real(matrix(0,0)); if(computeEigenvectors) m_eivec.setOnes(n,n); m_info = Success; diff --git a/test/eigensolver_complex.cpp b/test/eigensolver_complex.cpp index 0d4e2dc87..ad982ed40 100644 --- a/test/eigensolver_complex.cpp +++ b/test/eigensolver_complex.cpp @@ -125,6 +125,12 @@ template<typename MatrixType> void eigensolver(const MatrixType& m) ComplexEigenSolver<MatrixType> eiNaN(a); VERIFY_IS_EQUAL(eiNaN.info(), NoConvergence); } + + // regression test for bug 1098 + { + ComplexEigenSolver<MatrixType> eig(a.adjoint() * a); + eig.compute(a.adjoint() * a); + } } template<typename MatrixType> void eigensolver_verify_assert(const MatrixType& m) diff --git a/test/eigensolver_generalized_real.cpp b/test/eigensolver_generalized_real.cpp index 566a4bdc6..a46a2e50e 100644 --- a/test/eigensolver_generalized_real.cpp +++ b/test/eigensolver_generalized_real.cpp @@ -39,6 +39,14 @@ template<typename MatrixType> void generalized_eigensolver_real(const MatrixType VectorType realEigenvalues = eig.eigenvalues().real(); std::sort(realEigenvalues.data(), realEigenvalues.data()+realEigenvalues.size()); VERIFY_IS_APPROX(realEigenvalues, symmEig.eigenvalues()); + + // regression test for bug 1098 + { + GeneralizedSelfAdjointEigenSolver<MatrixType> eig1(a.adjoint() * a,b.adjoint() * b); + eig1.compute(a.adjoint() * a,b.adjoint() * b); + GeneralizedEigenSolver<MatrixType> eig2(a.adjoint() * a,b.adjoint() * b); + eig2.compute(a.adjoint() * a,b.adjoint() * b); + } } void test_eigensolver_generalized_real() diff --git a/test/eigensolver_generic.cpp b/test/eigensolver_generic.cpp index c5441ac4e..c42fcaeba 100644 --- a/test/eigensolver_generic.cpp +++ b/test/eigensolver_generic.cpp @@ -70,6 +70,12 @@ template<typename MatrixType> void eigensolver(const MatrixType& m) EigenSolver<MatrixType> eiNaN(a); VERIFY_IS_EQUAL(eiNaN.info(), NoConvergence); } + + // regression test for bug 1098 + { + EigenSolver<MatrixType> eig(a.adjoint() * a); + eig.compute(a.adjoint() * a); + } } template<typename MatrixType> void eigensolver_verify_assert(const MatrixType& m) diff --git a/test/eigensolver_selfadjoint.cpp b/test/eigensolver_selfadjoint.cpp index 4c3de7a80..a7b4deb5d 100644 --- a/test/eigensolver_selfadjoint.cpp +++ b/test/eigensolver_selfadjoint.cpp @@ -156,6 +156,12 @@ template<typename MatrixType> void selfadjointeigensolver(const MatrixType& m) SelfAdjointEigenSolver<MatrixType> eiSymmNaN(symmC); VERIFY_IS_EQUAL(eiSymmNaN.info(), NoConvergence); } + + // regression test for bug 1098 + { + SelfAdjointEigenSolver<MatrixType> eig(a.adjoint() * a); + eig.compute(a.adjoint() * a); + } } void bug_854() |