diff options
author | Gael Guennebaud <g.gael@free.fr> | 2016-11-06 20:29:57 +0100 |
---|---|---|
committer | Gael Guennebaud <g.gael@free.fr> | 2016-11-06 20:29:57 +0100 |
commit | 73985ead27f6c1a174e58e38363ca7317d584a7f (patch) | |
tree | 723dc3850287b0bdfff9ad5589af38d16df22a8d | |
parent | 436a1117922d1df5ac741f8391c62eaf3f34cd09 (diff) |
Extend unit test to check sparse solvers with a SparseVector as the rhs and result.
-rw-r--r-- | test/sparse_solver.h | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/test/sparse_solver.h b/test/sparse_solver.h index fd6199f3e..5145bc3eb 100644 --- a/test/sparse_solver.h +++ b/test/sparse_solver.h @@ -272,6 +272,7 @@ template<typename Solver> void check_sparse_spd_solving(Solver& solver, int maxS typedef typename Mat::Scalar Scalar; typedef typename Mat::StorageIndex StorageIndex; typedef SparseMatrix<Scalar,ColMajor, StorageIndex> SpMat; + typedef SparseVector<Scalar, 0, StorageIndex> SpVec; typedef Matrix<Scalar,Dynamic,Dynamic> DenseMatrix; typedef Matrix<Scalar,Dynamic,1> DenseVector; @@ -288,6 +289,8 @@ template<typename Solver> void check_sparse_spd_solving(Solver& solver, int maxS DenseVector b = DenseVector::Random(size); DenseMatrix dB(size,rhsCols); initSparse<Scalar>(density, dB, B, ForceNonZeroDiag); + SpVec c = B.col(0); + DenseVector dc = dB.col(0); CALL_SUBTEST( check_sparse_solving(solver, A, b, dA, b) ); CALL_SUBTEST( check_sparse_solving(solver, halfA, b, dA, b) ); @@ -295,6 +298,8 @@ template<typename Solver> void check_sparse_spd_solving(Solver& solver, int maxS CALL_SUBTEST( check_sparse_solving(solver, halfA, dB, dA, dB) ); CALL_SUBTEST( check_sparse_solving(solver, A, B, dA, dB) ); CALL_SUBTEST( check_sparse_solving(solver, halfA, B, dA, dB) ); + CALL_SUBTEST( check_sparse_solving(solver, A, c, dA, dc) ); + CALL_SUBTEST( check_sparse_solving(solver, halfA, c, dA, dc) ); // check only once if(i==0) @@ -396,6 +401,7 @@ template<typename Solver> void check_sparse_square_solving(Solver& solver, int m typedef typename Solver::MatrixType Mat; typedef typename Mat::Scalar Scalar; typedef SparseMatrix<Scalar,ColMajor, typename Mat::StorageIndex> SpMat; + typedef SparseVector<Scalar, 0, typename Mat::StorageIndex> SpVec; typedef Matrix<Scalar,Dynamic,Dynamic> DenseMatrix; typedef Matrix<Scalar,Dynamic,1> DenseVector; @@ -413,9 +419,12 @@ template<typename Solver> void check_sparse_square_solving(Solver& solver, int m double density = (std::max)(8./(size*rhsCols), 0.1); initSparse<Scalar>(density, dB, B, ForceNonZeroDiag); B.makeCompressed(); + SpVec c = B.col(0); + DenseVector dc = dB.col(0); CALL_SUBTEST(check_sparse_solving(solver, A, b, dA, b)); CALL_SUBTEST(check_sparse_solving(solver, A, dB, dA, dB)); CALL_SUBTEST(check_sparse_solving(solver, A, B, dA, dB)); + CALL_SUBTEST(check_sparse_solving(solver, A, c, dA, dc)); // check only once if(i==0) |