aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--Eigen/src/Eigenvalues/SelfAdjointEigenSolver.h2
-rw-r--r--test/eigensolver_complex.cpp6
-rw-r--r--test/eigensolver_generalized_real.cpp8
-rw-r--r--test/eigensolver_generic.cpp6
-rw-r--r--test/eigensolver_selfadjoint.cpp6
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()