mirror of
https://gitlab.com/libeigen/eigen.git
synced 2025-06-04 18:54:00 +08:00
Extend unit test to check sparse solvers with a SparseVector as the rhs and result.
This commit is contained in:
parent
436a111792
commit
73985ead27
@ -272,6 +272,7 @@ template<typename Solver> void check_sparse_spd_solving(Solver& solver, int maxS
|
|||||||
typedef typename Mat::Scalar Scalar;
|
typedef typename Mat::Scalar Scalar;
|
||||||
typedef typename Mat::StorageIndex StorageIndex;
|
typedef typename Mat::StorageIndex StorageIndex;
|
||||||
typedef SparseMatrix<Scalar,ColMajor, StorageIndex> SpMat;
|
typedef SparseMatrix<Scalar,ColMajor, StorageIndex> SpMat;
|
||||||
|
typedef SparseVector<Scalar, 0, StorageIndex> SpVec;
|
||||||
typedef Matrix<Scalar,Dynamic,Dynamic> DenseMatrix;
|
typedef Matrix<Scalar,Dynamic,Dynamic> DenseMatrix;
|
||||||
typedef Matrix<Scalar,Dynamic,1> DenseVector;
|
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);
|
DenseVector b = DenseVector::Random(size);
|
||||||
DenseMatrix dB(size,rhsCols);
|
DenseMatrix dB(size,rhsCols);
|
||||||
initSparse<Scalar>(density, dB, B, ForceNonZeroDiag);
|
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, A, b, dA, b) );
|
||||||
CALL_SUBTEST( check_sparse_solving(solver, halfA, 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, halfA, dB, dA, dB) );
|
||||||
CALL_SUBTEST( check_sparse_solving(solver, A, B, 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, 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
|
// check only once
|
||||||
if(i==0)
|
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 Solver::MatrixType Mat;
|
||||||
typedef typename Mat::Scalar Scalar;
|
typedef typename Mat::Scalar Scalar;
|
||||||
typedef SparseMatrix<Scalar,ColMajor, typename Mat::StorageIndex> SpMat;
|
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,Dynamic> DenseMatrix;
|
||||||
typedef Matrix<Scalar,Dynamic,1> DenseVector;
|
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);
|
double density = (std::max)(8./(size*rhsCols), 0.1);
|
||||||
initSparse<Scalar>(density, dB, B, ForceNonZeroDiag);
|
initSparse<Scalar>(density, dB, B, ForceNonZeroDiag);
|
||||||
B.makeCompressed();
|
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, b, dA, b));
|
||||||
CALL_SUBTEST(check_sparse_solving(solver, A, dB, dA, dB));
|
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, B, dA, dB));
|
||||||
|
CALL_SUBTEST(check_sparse_solving(solver, A, c, dA, dc));
|
||||||
|
|
||||||
// check only once
|
// check only once
|
||||||
if(i==0)
|
if(i==0)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user