aboutsummaryrefslogtreecommitdiffhomepage
path: root/test/sparse_solver.h
diff options
context:
space:
mode:
authorGravatar Gael Guennebaud <g.gael@free.fr>2015-10-26 16:16:24 +0100
committerGravatar Gael Guennebaud <g.gael@free.fr>2015-10-26 16:16:24 +0100
commita5324a131f3816c8312e27a9dc928b8d56d8cf3b (patch)
tree9d241029b473b1c833b6dc2eaf8ef23b170b05ae /test/sparse_solver.h
parentf93654ae16b261e462ee00c5255072f8dd7d387b (diff)
bug #1092: fix iterative solver ctors for expressions as input
Diffstat (limited to 'test/sparse_solver.h')
-rw-r--r--test/sparse_solver.h65
1 files changed, 40 insertions, 25 deletions
diff --git a/test/sparse_solver.h b/test/sparse_solver.h
index a0254ff1c..b67653496 100644
--- a/test/sparse_solver.h
+++ b/test/sparse_solver.h
@@ -63,32 +63,47 @@ void check_sparse_solving(Solver& solver, const typename Solver::MatrixType& A,
VERIFY(xm.isApprox(refX,test_precision<Scalar>()));
}
- // test initialization ctor
+ // if not too large, do some extra check:
+ if(A.rows()<2000)
{
- Rhs x(b.rows(), b.cols());
- Solver solver2(A);
- VERIFY(solver2.info() == Success);
- x = solver2.solve(b);
- VERIFY(x.isApprox(refX,test_precision<Scalar>()));
- }
-
- // test dense Block as the result and rhs:
- {
- DenseRhs x(refX.rows(), refX.cols());
- DenseRhs oldb(db);
- x.setZero();
- x.block(0,0,x.rows(),x.cols()) = solver.solve(db.block(0,0,db.rows(),db.cols()));
- VERIFY(oldb.isApprox(db) && "sparse solver testing: the rhs should not be modified!");
- VERIFY(x.isApprox(refX,test_precision<Scalar>()));
- }
-
- // test uncompressed inputs
- {
- Mat A2 = A;
- A2.reserve((ArrayXf::Random(A.outerSize())+2).template cast<typename Mat::StorageIndex>().eval());
- solver.compute(A2);
- Rhs x = solver.solve(b);
- VERIFY(x.isApprox(refX,test_precision<Scalar>()));
+ // test initialization ctor
+ {
+ Rhs x(b.rows(), b.cols());
+ Solver solver2(A);
+ VERIFY(solver2.info() == Success);
+ x = solver2.solve(b);
+ VERIFY(x.isApprox(refX,test_precision<Scalar>()));
+ }
+
+ // test dense Block as the result and rhs:
+ {
+ DenseRhs x(refX.rows(), refX.cols());
+ DenseRhs oldb(db);
+ x.setZero();
+ x.block(0,0,x.rows(),x.cols()) = solver.solve(db.block(0,0,db.rows(),db.cols()));
+ VERIFY(oldb.isApprox(db) && "sparse solver testing: the rhs should not be modified!");
+ VERIFY(x.isApprox(refX,test_precision<Scalar>()));
+ }
+
+ // test uncompressed inputs
+ {
+ Mat A2 = A;
+ A2.reserve((ArrayXf::Random(A.outerSize())+2).template cast<typename Mat::StorageIndex>().eval());
+ solver.compute(A2);
+ Rhs x = solver.solve(b);
+ VERIFY(x.isApprox(refX,test_precision<Scalar>()));
+ }
+
+ // test expression as input
+ {
+ solver.compute(0.5*(A+A));
+ Rhs x = solver.solve(b);
+ VERIFY(x.isApprox(refX,test_precision<Scalar>()));
+
+ Solver solver2(0.5*(A+A));
+ Rhs x2 = solver2.solve(b);
+ VERIFY(x2.isApprox(refX,test_precision<Scalar>()));
+ }
}
}