From 5b1d0cebc5c30975f6f392d6f7d49d35e2a3508f Mon Sep 17 00:00:00 2001 From: Gael Guennebaud Date: Sun, 5 Apr 2009 16:30:10 +0000 Subject: sparse module: new API proposal for triangular solves and experimental solver support with a sparse matrix as the rhs. --- test/sparse_solvers.cpp | 32 +++++++++++++++++++++++++++----- 1 file changed, 27 insertions(+), 5 deletions(-) (limited to 'test/sparse_solvers.cpp') diff --git a/test/sparse_solvers.cpp b/test/sparse_solvers.cpp index 8ce4e2264..d1090dfed 100644 --- a/test/sparse_solvers.cpp +++ b/test/sparse_solvers.cpp @@ -63,17 +63,39 @@ template void sparse_solvers(int rows, int cols) SparseMatrix m2(rows, cols); DenseMatrix refMat2 = DenseMatrix::Zero(rows, cols); - // lower + // lower - dense initSparse(density, refMat2, m2, ForceNonZeroDiag|MakeLowerTriangular, &zeroCoords, &nonzeroCoords); VERIFY_IS_APPROX(refMat2.template marked().solveTriangular(vec2), - m2.template marked().solveTriangular(vec3)); + m2.template triangular().solve(vec3)); - // upper + // upper - dense initSparse(density, refMat2, m2, ForceNonZeroDiag|MakeUpperTriangular, &zeroCoords, &nonzeroCoords); VERIFY_IS_APPROX(refMat2.template marked().solveTriangular(vec2), - m2.template marked().solveTriangular(vec3)); - + m2.template triangular().solve(vec3)); + // TODO test row major + + SparseMatrix matB(rows, rows); + DenseMatrix refMatB = DenseMatrix::Zero(rows, rows); + + // lower - sparse + initSparse(density, refMat2, m2, ForceNonZeroDiag|MakeLowerTriangular); + initSparse(density, refMatB, matB); + refMat2.template marked().solveTriangularInPlace(refMatB); + m2.template triangular().solveInPlace(matB); + VERIFY_IS_APPROX(matB.toDense(), refMatB); + + // upper - sparse + initSparse(density, refMat2, m2, ForceNonZeroDiag|MakeUpperTriangular); + initSparse(density, refMatB, matB); + refMat2.template marked().solveTriangularInPlace(refMatB); + m2.template triangular().solveInPlace(matB); + VERIFY_IS_APPROX(matB, refMatB); + + // test deprecated API + initSparse(density, refMat2, m2, ForceNonZeroDiag|MakeLowerTriangular, &zeroCoords, &nonzeroCoords); + VERIFY_IS_APPROX(refMat2.template marked().solveTriangular(vec2), + m2.template marked().solveTriangular(vec3)); } // test LLT -- cgit v1.2.3