diff options
author | Gael Guennebaud <g.gael@free.fr> | 2015-02-16 19:09:48 +0100 |
---|---|---|
committer | Gael Guennebaud <g.gael@free.fr> | 2015-02-16 19:09:48 +0100 |
commit | 9f49f00feb8f9f06290343b8cc134394801bc130 (patch) | |
tree | 7dd3912098cdb3b8f7b484752baa36a0e148476c /test/sparse_solver.h | |
parent | f0b1b1df9bb893b5fb7d6673b33dad794105c811 (diff) |
Extend sparse-determinant unitests
Diffstat (limited to 'test/sparse_solver.h')
-rw-r--r-- | test/sparse_solver.h | 33 |
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); } } |