From 9ffc0f6975a6dec86b8e9eacc0af019124d20d43 Mon Sep 17 00:00:00 2001 From: Gael Guennebaud Date: Sun, 13 Jun 2010 23:29:44 +0200 Subject: an attempt to fix 133 --- test/sparse_solvers.cpp | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) (limited to 'test/sparse_solvers.cpp') diff --git a/test/sparse_solvers.cpp b/test/sparse_solvers.cpp index ea8aee718..9d30af146 100644 --- a/test/sparse_solvers.cpp +++ b/test/sparse_solvers.cpp @@ -115,9 +115,11 @@ template void sparse_solvers(int rows, int cols) DenseVector b = DenseVector::Random(cols); DenseVector refX(cols), x(cols); - initSPD(density, refMat2, m2); + initSparse(density, refMat2, m2, ForceNonZeroDiag|MakeLowerTriangular, 0, 0); + for(int i=0; i().llt().solve(b); if (!NumTraits::IsComplex) { x = b; @@ -160,8 +162,7 @@ template void sparse_solvers(int rows, int cols) for(int i=0; i().llt().solve(b); - // FIXME use LLT to compute the reference because LDLT seems to fail with large matrices + refX = refMat2.template selfadjointView().ldlt().solve(b); typedef SparseMatrix SparseSelfAdjointMatrix; x = b; SparseLDLT ldlt(m2); @@ -170,6 +171,7 @@ template void sparse_solvers(int rows, int cols) else std::cerr << "warning LDLT failed\n"; + VERIFY_IS_APPROX(refMat2.template selfadjointView() * x, b); VERIFY(refX.isApprox(x,test_precision()) && "LDLT: default"); } @@ -242,7 +244,8 @@ void test_sparse_solvers() { for(int i = 0; i < g_repeat; i++) { CALL_SUBTEST_1(sparse_solvers(8, 8) ); - CALL_SUBTEST_2(sparse_solvers >(16, 16) ); - CALL_SUBTEST_1(sparse_solvers(100, 100) ); + int s = ei_random(1,300); + CALL_SUBTEST_2(sparse_solvers >(s,s) ); + CALL_SUBTEST_1(sparse_solvers(s,s) ); } } -- cgit v1.2.3