• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 #ifndef TEST_SOLVERBASE_H
2 #define TEST_SOLVERBASE_H
3 
4 template<typename DstType, typename RhsType, typename MatrixType, typename SolverType>
check_solverbase(const MatrixType & matrix,const SolverType & solver,Index rows,Index cols,Index cols2)5 void check_solverbase(const MatrixType& matrix, const SolverType& solver, Index rows, Index cols, Index cols2)
6 {
7   // solve
8   DstType m2               = DstType::Random(cols,cols2);
9   RhsType m3               = matrix*m2;
10   DstType solver_solution  = DstType::Random(cols,cols2);
11   solver._solve_impl(m3, solver_solution);
12   VERIFY_IS_APPROX(m3, matrix*solver_solution);
13   solver_solution          = DstType::Random(cols,cols2);
14   solver_solution          = solver.solve(m3);
15   VERIFY_IS_APPROX(m3, matrix*solver_solution);
16   // test solve with transposed
17   m3                       = RhsType::Random(rows,cols2);
18   m2                       = matrix.transpose()*m3;
19   RhsType solver_solution2 = RhsType::Random(rows,cols2);
20   solver.template _solve_impl_transposed<false>(m2, solver_solution2);
21   VERIFY_IS_APPROX(m2, matrix.transpose()*solver_solution2);
22   solver_solution2         = RhsType::Random(rows,cols2);
23   solver_solution2         = solver.transpose().solve(m2);
24   VERIFY_IS_APPROX(m2, matrix.transpose()*solver_solution2);
25   // test solve with conjugate transposed
26   m3                       = RhsType::Random(rows,cols2);
27   m2                       = matrix.adjoint()*m3;
28   solver_solution2         = RhsType::Random(rows,cols2);
29   solver.template _solve_impl_transposed<true>(m2, solver_solution2);
30   VERIFY_IS_APPROX(m2, matrix.adjoint()*solver_solution2);
31   solver_solution2         = RhsType::Random(rows,cols2);
32   solver_solution2         = solver.adjoint().solve(m2);
33   VERIFY_IS_APPROX(m2, matrix.adjoint()*solver_solution2);
34 }
35 
36 #endif // TEST_SOLVERBASE_H
37