aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar Gael Guennebaud <g.gael@free.fr>2016-11-06 20:29:57 +0100
committerGravatar Gael Guennebaud <g.gael@free.fr>2016-11-06 20:29:57 +0100
commit73985ead27f6c1a174e58e38363ca7317d584a7f (patch)
tree723dc3850287b0bdfff9ad5589af38d16df22a8d
parent436a1117922d1df5ac741f8391c62eaf3f34cd09 (diff)
Extend unit test to check sparse solvers with a SparseVector as the rhs and result.
-rw-r--r--test/sparse_solver.h9
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)