blob: 87e1f8ce96d8afa9f1bebaf1eb93c4e7ea755601 [file] [log] [blame]
Googler45874d82019-08-21 12:06:47 -07001// This file is part of Eigen, a lightweight C++ template library
2// for linear algebra.
3//
4// Copyright (C) 2011 Gael Guennebaud <g.gael@free.fr>
5//
6// This Source Code Form is subject to the terms of the Mozilla
7// Public License v. 2.0. If a copy of the MPL was not distributed
8// with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
9
10#include "sparse_solver.h"
11#include <Eigen/IterativeLinearSolvers>
12
Rasmus Munk Larsen2434cfd2023-12-06 12:02:41 -080013template <typename T, typename I_>
14void test_conjugate_gradient_T() {
15 typedef SparseMatrix<T, 0, I_> SparseMatrixType;
16 ConjugateGradient<SparseMatrixType, Lower> cg_colmajor_lower_diag;
17 ConjugateGradient<SparseMatrixType, Upper> cg_colmajor_upper_diag;
18 ConjugateGradient<SparseMatrixType, Lower | Upper> cg_colmajor_loup_diag;
Googler45874d82019-08-21 12:06:47 -070019 ConjugateGradient<SparseMatrixType, Lower, IdentityPreconditioner> cg_colmajor_lower_I;
20 ConjugateGradient<SparseMatrixType, Upper, IdentityPreconditioner> cg_colmajor_upper_I;
21
Rasmus Munk Larsen2434cfd2023-12-06 12:02:41 -080022 CALL_SUBTEST(check_sparse_spd_solving(cg_colmajor_lower_diag));
23 CALL_SUBTEST(check_sparse_spd_solving(cg_colmajor_upper_diag));
24 CALL_SUBTEST(check_sparse_spd_solving(cg_colmajor_loup_diag));
25 CALL_SUBTEST(check_sparse_spd_solving(cg_colmajor_lower_I));
26 CALL_SUBTEST(check_sparse_spd_solving(cg_colmajor_upper_I));
Googler45874d82019-08-21 12:06:47 -070027}
28
Rasmus Munk Larsen2434cfd2023-12-06 12:02:41 -080029EIGEN_DECLARE_TEST(conjugate_gradient) {
30 CALL_SUBTEST_1((test_conjugate_gradient_T<double, int>()));
31 CALL_SUBTEST_2((test_conjugate_gradient_T<std::complex<double>, int>()));
32 CALL_SUBTEST_3((test_conjugate_gradient_T<double, long int>()));
Googler45874d82019-08-21 12:06:47 -070033}