aboutsummaryrefslogtreecommitdiffhomepage
path: root/test/sparse_solver.h
diff options
context:
space:
mode:
authorGravatar Gael Guennebaud <g.gael@free.fr>2015-02-16 19:09:48 +0100
committerGravatar Gael Guennebaud <g.gael@free.fr>2015-02-16 19:09:48 +0100
commit9f49f00feb8f9f06290343b8cc134394801bc130 (patch)
tree7dd3912098cdb3b8f7b484752baa36a0e148476c /test/sparse_solver.h
parentf0b1b1df9bb893b5fb7d6673b33dad794105c811 (diff)
Extend sparse-determinant unitests
Diffstat (limited to 'test/sparse_solver.h')
-rw-r--r--test/sparse_solver.h33
1 files changed, 20 insertions, 13 deletions
diff --git a/test/sparse_solver.h b/test/sparse_solver.h
index 45cfdad25..892a9777f 100644
--- a/test/sparse_solver.h
+++ b/test/sparse_solver.h
@@ -304,7 +304,7 @@ template<typename Solver> void check_sparse_spd_determinant(Solver& solver)
}
template<typename Solver, typename DenseMat>
-int generate_sparse_square_problem(Solver&, typename Solver::MatrixType& A, DenseMat& dA, int maxSize = 300)
+int generate_sparse_square_problem(Solver&, typename Solver::MatrixType& A, DenseMat& dA, int maxSize = 300, int options = ForceNonZeroDiag)
{
typedef typename Solver::MatrixType Mat;
typedef typename Mat::Scalar Scalar;
@@ -315,7 +315,7 @@ int generate_sparse_square_problem(Solver&, typename Solver::MatrixType& A, Dens
A.resize(size,size);
dA.resize(size,size);
- initSparse<Scalar>(density, dA, A, ForceNonZeroDiag);
+ initSparse<Scalar>(density, dA, A, options);
return size;
}
@@ -376,13 +376,20 @@ template<typename Solver> void check_sparse_square_determinant(Solver& solver)
typedef typename Solver::MatrixType Mat;
typedef typename Mat::Scalar Scalar;
typedef Matrix<Scalar,Dynamic,Dynamic> DenseMatrix;
-
- // generate the problem
- Mat A;
- DenseMatrix dA;
- generate_sparse_square_problem(solver, A, dA, 30);
- A.makeCompressed();
+
for (int i = 0; i < g_repeat; i++) {
+ // generate the problem
+ Mat A;
+ DenseMatrix dA;
+
+ int size = internal::random<int>(1,30);
+ dA.setRandom(size,size);
+
+ dA = (dA.array().abs()<0.3).select(0,dA);
+ dA.diagonal() = (dA.diagonal().array()==0).select(1,dA.diagonal());
+ A = dA.sparseView();
+ A.makeCompressed();
+
check_sparse_determinant(solver, A, dA);
}
}
@@ -393,12 +400,12 @@ template<typename Solver> void check_sparse_square_abs_determinant(Solver& solve
typedef typename Mat::Scalar Scalar;
typedef Matrix<Scalar,Dynamic,Dynamic> DenseMatrix;
- // generate the problem
- Mat A;
- DenseMatrix dA;
- generate_sparse_square_problem(solver, A, dA, 30);
- A.makeCompressed();
for (int i = 0; i < g_repeat; i++) {
+ // generate the problem
+ Mat A;
+ DenseMatrix dA;
+ generate_sparse_square_problem(solver, A, dA, 30);
+ A.makeCompressed();
check_sparse_abs_determinant(solver, A, dA);
}
}