// SPDX-FileCopyrightText: The Eigen Authors
// SPDX-License-Identifier: MPL-2.0

#ifndef TEST_SOLVERBASE_H
#define TEST_SOLVERBASE_H

template <typename DstType, typename RhsType, typename MatrixType, typename SolverType>
void check_solverbase(const MatrixType& matrix, const SolverType& solver, Index rows, Index cols, Index cols2) {
  // solve
  DstType m2 = DstType::Random(cols, cols2);
  RhsType m3 = matrix * m2;
  DstType solver_solution = DstType::Random(cols, cols2);
  solver._solve_impl(m3, solver_solution);
  VERIFY_IS_APPROX(m3, matrix * solver_solution);
  solver_solution = DstType::Random(cols, cols2);
  solver_solution = solver.solve(m3);
  VERIFY_IS_APPROX(m3, matrix * solver_solution);
  // test solve with transposed
  m3 = RhsType::Random(rows, cols2);
  m2 = matrix.transpose() * m3;
  RhsType solver_solution2 = RhsType::Random(rows, cols2);
  solver.template _solve_impl_transposed<false>(m2, solver_solution2);
  VERIFY_IS_APPROX(m2, matrix.transpose() * solver_solution2);
  solver_solution2 = RhsType::Random(rows, cols2);
  solver_solution2 = solver.transpose().solve(m2);
  VERIFY_IS_APPROX(m2, matrix.transpose() * solver_solution2);
  // test solve with conjugate transposed
  m3 = RhsType::Random(rows, cols2);
  m2 = matrix.adjoint() * m3;
  solver_solution2 = RhsType::Random(rows, cols2);
  solver.template _solve_impl_transposed<true>(m2, solver_solution2);
  VERIFY_IS_APPROX(m2, matrix.adjoint() * solver_solution2);
  solver_solution2 = RhsType::Random(rows, cols2);
  solver_solution2 = solver.adjoint().solve(m2);
  VERIFY_IS_APPROX(m2, matrix.adjoint() * solver_solution2);
  // test with temporary expression as rhs
  m2 = DstType::Random(cols, cols2);
  solver_solution = solver.solve(matrix * m2);
  VERIFY_IS_APPROX(matrix * m2, matrix * solver_solution);
}

#endif  // TEST_SOLVERBASE_H
