solverbase.h
Go to the documentation of this file.
1 #ifndef TEST_SOLVERBASE_H
2 #define TEST_SOLVERBASE_H
3 
4 template <typename DstType, typename RhsType, typename MatrixType, typename SolverType>
5 void check_solverbase(const MatrixType& matrix, const SolverType& solver, Index rows, Index cols, Index cols2) {
6  // solve
7  DstType m2 = DstType::Random(cols, cols2);
8  RhsType m3 = matrix * m2;
9  DstType solver_solution = DstType::Random(cols, cols2);
10  solver._solve_impl(m3, solver_solution);
11  VERIFY_IS_APPROX(m3, matrix * solver_solution);
12  solver_solution = DstType::Random(cols, cols2);
13  solver_solution = solver.solve(m3);
14  VERIFY_IS_APPROX(m3, matrix * solver_solution);
15  // test solve with transposed
16  m3 = RhsType::Random(rows, cols2);
17  m2 = matrix.transpose() * m3;
18  RhsType solver_solution2 = RhsType::Random(rows, cols2);
19  solver.template _solve_impl_transposed<false>(m2, solver_solution2);
20  VERIFY_IS_APPROX(m2, matrix.transpose() * solver_solution2);
21  solver_solution2 = RhsType::Random(rows, cols2);
22  solver_solution2 = solver.transpose().solve(m2);
23  VERIFY_IS_APPROX(m2, matrix.transpose() * solver_solution2);
24  // test solve with conjugate transposed
25  m3 = RhsType::Random(rows, cols2);
26  m2 = matrix.adjoint() * m3;
27  solver_solution2 = RhsType::Random(rows, cols2);
28  solver.template _solve_impl_transposed<true>(m2, solver_solution2);
29  VERIFY_IS_APPROX(m2, matrix.adjoint() * solver_solution2);
30  solver_solution2 = RhsType::Random(rows, cols2);
31  solver_solution2 = solver.adjoint().solve(m2);
32  VERIFY_IS_APPROX(m2, matrix.adjoint() * solver_solution2);
33  // test with temporary expression as rhs
34  m2 = DstType::Random(cols, cols2);
35  solver_solution = solver.solve(matrix * m2);
36  VERIFY_IS_APPROX(matrix * m2, matrix * solver_solution);
37 }
38 
39 #endif // TEST_SOLVERBASE_H
BiCGSTAB< SparseMatrix< double > > solver
Definition: BiCGSTAB_simple.cpp:5
MatrixType m2(n_dims)
int rows
Definition: Tutorial_commainit_02.cpp:1
int cols
Definition: Tutorial_commainit_02.cpp:1
MatrixXf MatrixType
Definition: benchmark-blocking-sizes.cpp:52
Eigen::Map< Eigen::Matrix< T, Eigen::Dynamic, Eigen::Dynamic, Eigen::ColMajor >, 0, Eigen::OuterStride<> > matrix(T *data, int rows, int cols, int stride)
Definition: common.h:85
#define VERIFY_IS_APPROX(a, b)
Definition: integer_types.cpp:13
EIGEN_DEFAULT_DENSE_INDEX_TYPE Index
The Index type as used for the API.
Definition: Meta.h:83
void check_solverbase(const MatrixType &matrix, const SolverType &solver, Index rows, Index cols, Index cols2)
Definition: solverbase.h:5