xref: /aosp_15_r20/external/eigen/test/cholmod_support.cpp (revision bf2c37156dfe67e5dfebd6d394bad8b2ab5804d4)
1*bf2c3715SXin Li // This file is part of Eigen, a lightweight C++ template library
2*bf2c3715SXin Li // for linear algebra.
3*bf2c3715SXin Li //
4*bf2c3715SXin Li // Copyright (C) 2011 Gael Guennebaud <[email protected]>
5*bf2c3715SXin Li //
6*bf2c3715SXin Li // This Source Code Form is subject to the terms of the Mozilla
7*bf2c3715SXin Li // Public License v. 2.0. If a copy of the MPL was not distributed
8*bf2c3715SXin Li // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
9*bf2c3715SXin Li 
10*bf2c3715SXin Li #define EIGEN_NO_DEBUG_SMALL_PRODUCT_BLOCKS
11*bf2c3715SXin Li #include "sparse_solver.h"
12*bf2c3715SXin Li 
13*bf2c3715SXin Li #include <Eigen/CholmodSupport>
14*bf2c3715SXin Li 
test_cholmod_ST()15*bf2c3715SXin Li template<typename SparseType> void test_cholmod_ST()
16*bf2c3715SXin Li {
17*bf2c3715SXin Li   CholmodDecomposition<SparseType, Lower> g_chol_colmajor_lower; g_chol_colmajor_lower.setMode(CholmodSupernodalLLt);
18*bf2c3715SXin Li   CholmodDecomposition<SparseType, Upper> g_chol_colmajor_upper; g_chol_colmajor_upper.setMode(CholmodSupernodalLLt);
19*bf2c3715SXin Li   CholmodDecomposition<SparseType, Lower> g_llt_colmajor_lower;  g_llt_colmajor_lower.setMode(CholmodSimplicialLLt);
20*bf2c3715SXin Li   CholmodDecomposition<SparseType, Upper> g_llt_colmajor_upper;  g_llt_colmajor_upper.setMode(CholmodSimplicialLLt);
21*bf2c3715SXin Li   CholmodDecomposition<SparseType, Lower> g_ldlt_colmajor_lower; g_ldlt_colmajor_lower.setMode(CholmodLDLt);
22*bf2c3715SXin Li   CholmodDecomposition<SparseType, Upper> g_ldlt_colmajor_upper; g_ldlt_colmajor_upper.setMode(CholmodLDLt);
23*bf2c3715SXin Li 
24*bf2c3715SXin Li   CholmodSupernodalLLT<SparseType, Lower> chol_colmajor_lower;
25*bf2c3715SXin Li   CholmodSupernodalLLT<SparseType, Upper> chol_colmajor_upper;
26*bf2c3715SXin Li   CholmodSimplicialLLT<SparseType, Lower> llt_colmajor_lower;
27*bf2c3715SXin Li   CholmodSimplicialLLT<SparseType, Upper> llt_colmajor_upper;
28*bf2c3715SXin Li   CholmodSimplicialLDLT<SparseType, Lower> ldlt_colmajor_lower;
29*bf2c3715SXin Li   CholmodSimplicialLDLT<SparseType, Upper> ldlt_colmajor_upper;
30*bf2c3715SXin Li 
31*bf2c3715SXin Li   check_sparse_spd_solving(g_chol_colmajor_lower);
32*bf2c3715SXin Li   check_sparse_spd_solving(g_chol_colmajor_upper);
33*bf2c3715SXin Li   check_sparse_spd_solving(g_llt_colmajor_lower);
34*bf2c3715SXin Li   check_sparse_spd_solving(g_llt_colmajor_upper);
35*bf2c3715SXin Li   check_sparse_spd_solving(g_ldlt_colmajor_lower);
36*bf2c3715SXin Li   check_sparse_spd_solving(g_ldlt_colmajor_upper);
37*bf2c3715SXin Li 
38*bf2c3715SXin Li   check_sparse_spd_solving(chol_colmajor_lower);
39*bf2c3715SXin Li   check_sparse_spd_solving(chol_colmajor_upper);
40*bf2c3715SXin Li   check_sparse_spd_solving(llt_colmajor_lower);
41*bf2c3715SXin Li   check_sparse_spd_solving(llt_colmajor_upper);
42*bf2c3715SXin Li   check_sparse_spd_solving(ldlt_colmajor_lower);
43*bf2c3715SXin Li   check_sparse_spd_solving(ldlt_colmajor_upper);
44*bf2c3715SXin Li 
45*bf2c3715SXin Li   check_sparse_spd_determinant(chol_colmajor_lower);
46*bf2c3715SXin Li   check_sparse_spd_determinant(chol_colmajor_upper);
47*bf2c3715SXin Li   check_sparse_spd_determinant(llt_colmajor_lower);
48*bf2c3715SXin Li   check_sparse_spd_determinant(llt_colmajor_upper);
49*bf2c3715SXin Li   check_sparse_spd_determinant(ldlt_colmajor_lower);
50*bf2c3715SXin Li   check_sparse_spd_determinant(ldlt_colmajor_upper);
51*bf2c3715SXin Li }
52*bf2c3715SXin Li 
test_cholmod_T()53*bf2c3715SXin Li template<typename T, int flags, typename IdxType> void test_cholmod_T()
54*bf2c3715SXin Li {
55*bf2c3715SXin Li     test_cholmod_ST<SparseMatrix<T, flags, IdxType> >();
56*bf2c3715SXin Li }
57*bf2c3715SXin Li 
EIGEN_DECLARE_TEST(cholmod_support)58*bf2c3715SXin Li EIGEN_DECLARE_TEST(cholmod_support)
59*bf2c3715SXin Li {
60*bf2c3715SXin Li   CALL_SUBTEST_11( (test_cholmod_T<double              , ColMajor, int >()) );
61*bf2c3715SXin Li   CALL_SUBTEST_12( (test_cholmod_T<double              , ColMajor, long>()) );
62*bf2c3715SXin Li   CALL_SUBTEST_13( (test_cholmod_T<double              , RowMajor, int >()) );
63*bf2c3715SXin Li   CALL_SUBTEST_14( (test_cholmod_T<double              , RowMajor, long>()) );
64*bf2c3715SXin Li   CALL_SUBTEST_21( (test_cholmod_T<std::complex<double>, ColMajor, int >()) );
65*bf2c3715SXin Li   CALL_SUBTEST_22( (test_cholmod_T<std::complex<double>, ColMajor, long>()) );
66*bf2c3715SXin Li   // TODO complex row-major matrices do not work at the moment:
67*bf2c3715SXin Li   // CALL_SUBTEST_23( (test_cholmod_T<std::complex<double>, RowMajor, int >()) );
68*bf2c3715SXin Li   // CALL_SUBTEST_24( (test_cholmod_T<std::complex<double>, RowMajor, long>()) );
69*bf2c3715SXin Li }
70