From b85bcd91bf815fee8d42ac6f2add45e246f0ed51 Mon Sep 17 00:00:00 2001 From: Gael Guennebaud Date: Thu, 1 Dec 2011 18:17:19 +0100 Subject: [PATCH] remove GSL dependency in the unit tests --- test/CMakeLists.txt | 20 ++---------- test/cholesky.cpp | 32 ------------------- test/eigensolver_generic.cpp | 4 --- test/eigensolver_selfadjoint.cpp | 53 ++------------------------------ 4 files changed, 5 insertions(+), 104 deletions(-) diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index e1379d78b..6b17ed941 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -52,20 +52,6 @@ else() ei_add_property(EIGEN_MISSING_BACKENDS "SuperLU, ") endif() -find_package(GSL) -if(GSL_FOUND AND GSL_VERSION_MINOR LESS 9) - set(GSL_FOUND "") -endif(GSL_FOUND AND GSL_VERSION_MINOR LESS 9) -if(GSL_FOUND) - add_definitions("-DHAS_GSL" ${GSL_DEFINITIONS}) - include_directories(${GSL_INCLUDE_DIR}) - ei_add_property(EIGEN_TESTED_BACKENDS "GSL, ") -else(GSL_FOUND) - ei_add_property(EIGEN_MISSING_BACKENDS "GSL, ") - set(GSL_LIBRARIES "") -endif(GSL_FOUND) - - option(EIGEN_TEST_NOQT "Disable Qt support in unit tests" OFF) if(NOT EIGEN_TEST_NOQT) find_package(Qt4) @@ -128,7 +114,7 @@ ei_add_test(product_mmtr) ei_add_test(product_notemporary) ei_add_test(stable_norm) ei_add_test(bandmatrix) -ei_add_test(cholesky "" "${GSL_LIBRARIES}") +ei_add_test(cholesky) ei_add_test(lu) ei_add_test(determinant) ei_add_test(inverse) @@ -139,8 +125,8 @@ ei_add_test(upperbidiagonalization) ei_add_test(hessenberg) ei_add_test(schur_real) ei_add_test(schur_complex) -ei_add_test(eigensolver_selfadjoint "" "${GSL_LIBRARIES}") -ei_add_test(eigensolver_generic "" "${GSL_LIBRARIES}") +ei_add_test(eigensolver_selfadjoint) +ei_add_test(eigensolver_generic) ei_add_test(eigensolver_complex) ei_add_test(jacobi) ei_add_test(jacobisvd) diff --git a/test/cholesky.cpp b/test/cholesky.cpp index 2b646e329..66eae547f 100644 --- a/test/cholesky.cpp +++ b/test/cholesky.cpp @@ -41,10 +41,6 @@ static int nb_temporaries; VERIFY( (#XPR) && nb_temporaries==N ); \ } -#ifdef HAS_GSL -#include "gsl_helper.h" -#endif - template void cholesky(const MatrixType& m) { typedef typename MatrixType::Index Index; @@ -77,34 +73,6 @@ template void cholesky(const MatrixType& m) // FIXME: currently that fails !! //symm.template part().setZero(); - #ifdef HAS_GSL -// if (internal::is_same::value) -// { -// typedef GslTraits Gsl; -// typename Gsl::Matrix gMatA=0, gSymm=0; -// typename Gsl::Vector gVecB=0, gVecX=0; -// convert(symm, gSymm); -// convert(symm, gMatA); -// convert(vecB, gVecB); -// convert(vecB, gVecX); -// Gsl::cholesky(gMatA); -// Gsl::cholesky_solve(gMatA, gVecB, gVecX); -// VectorType vecX(rows), _vecX, _vecB; -// convert(gVecX, _vecX); -// symm.llt().solve(vecB, &vecX); -// Gsl::prod(gSymm, gVecX, gVecB); -// convert(gVecB, _vecB); -// // test gsl itself ! -// VERIFY_IS_APPROX(vecB, _vecB); -// VERIFY_IS_APPROX(vecX, _vecX); -// -// Gsl::free(gMatA); -// Gsl::free(gSymm); -// Gsl::free(gVecB); -// Gsl::free(gVecX); -// } - #endif - { LLT chollo(symmLo); VERIFY_IS_APPROX(symm, chollo.reconstructedMatrix()); diff --git a/test/eigensolver_generic.cpp b/test/eigensolver_generic.cpp index efacdb2b3..96ff4f873 100644 --- a/test/eigensolver_generic.cpp +++ b/test/eigensolver_generic.cpp @@ -27,10 +27,6 @@ #include #include -#ifdef HAS_GSL -#include "gsl_helper.h" -#endif - template void eigensolver(const MatrixType& m) { typedef typename MatrixType::Index Index; diff --git a/test/eigensolver_selfadjoint.cpp b/test/eigensolver_selfadjoint.cpp index 49e22795a..26d3d1f70 100644 --- a/test/eigensolver_selfadjoint.cpp +++ b/test/eigensolver_selfadjoint.cpp @@ -27,10 +27,6 @@ #include #include -#ifdef HAS_GSL -#include "gsl_helper.h" -#endif - template void selfadjointeigensolver(const MatrixType& m) { typedef typename MatrixType::Index Index; @@ -64,52 +60,6 @@ template void selfadjointeigensolver(const MatrixType& m) // generalized eigen pb GeneralizedSelfAdjointEigenSolver eiSymmGen(symmA, symmB); - #ifdef HAS_GSL - if (internal::is_same::value) - { - // restore symmA and symmB. - symmA = MatrixType(symmA.template selfadjointView()); - symmB = MatrixType(symmB.template selfadjointView()); - typedef GslTraits Gsl; - typename Gsl::Matrix gEvec=0, gSymmA=0, gSymmB=0; - typename GslTraits::Vector gEval=0; - RealVectorType _eval; - MatrixType _evec; - convert(symmA, gSymmA); - convert(symmB, gSymmB); - convert(symmA, gEvec); - gEval = GslTraits::createVector(rows); - - Gsl::eigen_symm(gSymmA, gEval, gEvec); - convert(gEval, _eval); - convert(gEvec, _evec); - - // test gsl itself ! - VERIFY((symmA * _evec).isApprox(_evec * _eval.asDiagonal(), largerEps)); - - // compare with eigen - VERIFY_IS_APPROX(_eval, eiSymm.eigenvalues()); - VERIFY_IS_APPROX(_evec.cwiseAbs(), eiSymm.eigenvectors().cwiseAbs()); - - // generalized pb - Gsl::eigen_symm_gen(gSymmA, gSymmB, gEval, gEvec); - convert(gEval, _eval); - convert(gEvec, _evec); - // test GSL itself: - VERIFY((symmA * _evec).isApprox(symmB * (_evec * _eval.asDiagonal()), largerEps)); - - // compare with eigen - MatrixType normalized_eivec = eiSymmGen.eigenvectors()*eiSymmGen.eigenvectors().colwise().norm().asDiagonal().inverse(); - VERIFY_IS_APPROX(_eval, eiSymmGen.eigenvalues()); - VERIFY_IS_APPROX(_evec.cwiseAbs(), normalized_eivec.cwiseAbs()); - - Gsl::free(gSymmA); - Gsl::free(gSymmB); - GslTraits::free(gEval); - Gsl::free(gEvec); - } - #endif - VERIFY_IS_EQUAL(eiSymm.info(), Success); VERIFY((symmA.template selfadjointView() * eiSymm.eigenvectors()).isApprox( eiSymm.eigenvectors() * eiSymm.eigenvalues().asDiagonal(), largerEps)); @@ -180,7 +130,8 @@ void test_eigensolver_selfadjoint() { int s; for(int i = 0; i < g_repeat; i++) { - // very important to test a 3x3 matrix since we provide a special path for it + // very important to test 3x3 and 2x2 matrices since we provide special paths for them + CALL_SUBTEST_1( selfadjointeigensolver(Matrix2d()) ); CALL_SUBTEST_1( selfadjointeigensolver(Matrix3f()) ); CALL_SUBTEST_2( selfadjointeigensolver(Matrix4d()) ); s = internal::random(1,EIGEN_TEST_MAX_SIZE/4);