selfadjoint.cpp
Go to the documentation of this file.
1 // This file is triangularView of Eigen, a lightweight C++ template library
2 // for linear algebra.
3 //
4 // Copyright (C) 2010 Gael Guennebaud <gael.guennebaud@inria.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 #define TEST_CHECK_STATIC_ASSERTIONS
11 #include "main.h"
12 
13 // This file tests the basic selfadjointView API,
14 // the related products and decompositions are tested in specific files.
15 
16 template<typename MatrixType> void selfadjoint(const MatrixType& m)
17 {
18  typedef typename MatrixType::Scalar Scalar;
19 
20  Index rows = m.rows();
21  Index cols = m.cols();
22 
23  MatrixType m1 = MatrixType::Random(rows, cols),
24  m2 = MatrixType::Random(rows, cols),
25  m3(rows, cols),
26  m4(rows, cols);
27 
28  m1.diagonal() = m1.diagonal().real().template cast<Scalar>();
29 
30  // check selfadjoint to dense
31  m3 = m1.template selfadjointView<Upper>();
32  VERIFY_IS_APPROX(MatrixType(m3.template triangularView<Upper>()), MatrixType(m1.template triangularView<Upper>()));
33  VERIFY_IS_APPROX(m3, m3.adjoint());
34 
35  m3 = m1.template selfadjointView<Lower>();
37  VERIFY_IS_APPROX(m3, m3.adjoint());
38 
39  m3 = m1.template selfadjointView<Upper>();
40  m4 = m2;
41  m4 += m1.template selfadjointView<Upper>();
42  VERIFY_IS_APPROX(m4, m2+m3);
43 
44  m3 = m1.template selfadjointView<Lower>();
45  m4 = m2;
46  m4 -= m1.template selfadjointView<Lower>();
47  VERIFY_IS_APPROX(m4, m2-m3);
48 
49  VERIFY_RAISES_STATIC_ASSERT(m2.template selfadjointView<StrictlyUpper>());
50  VERIFY_RAISES_STATIC_ASSERT(m2.template selfadjointView<UnitLower>());
51 }
52 
53 void bug_159()
54 {
55  Matrix3d m = Matrix3d::Random().selfadjointView<Lower>();
57 }
58 
60 {
61  for(int i = 0; i < g_repeat ; i++)
62  {
63  int s = internal::random<int>(1,EIGEN_TEST_MAX_SIZE);
64 
65  CALL_SUBTEST_1( selfadjoint(Matrix<float, 1, 1>()) );
66  CALL_SUBTEST_2( selfadjoint(Matrix<float, 2, 2>()) );
67  CALL_SUBTEST_3( selfadjoint(Matrix3cf()) );
68  CALL_SUBTEST_4( selfadjoint(MatrixXcd(s,s)) );
69  CALL_SUBTEST_5( selfadjoint(Matrix<float,Dynamic,Dynamic,RowMajor>(s, s)) );
70 
72  }
73 
74  CALL_SUBTEST_1( bug_159() );
75 }
Matrix3f m
SCALAR Scalar
Definition: bench_gemm.cpp:33
void bug_159()
Definition: selfadjoint.cpp:53
void selfadjoint(const MatrixType &m)
Definition: selfadjoint.cpp:16
MatrixType m2(n_dims)
MatrixXf MatrixType
#define VERIFY_RAISES_STATIC_ASSERT(a)
Definition: main.h:289
void test_selfadjoint()
Definition: selfadjoint.cpp:59
#define VERIFY_IS_APPROX(a, b)
Matrix3d m1
Definition: IOFormat.cpp:2
static int g_repeat
Definition: main.h:144
EIGEN_DEFAULT_DENSE_INDEX_TYPE Index
The Index type as used for the API.
Definition: Meta.h:33
RealScalar s
#define TEST_SET_BUT_UNUSED_VARIABLE(X)
Definition: main.h:91
#define EIGEN_TEST_MAX_SIZE
A triangularView< Lower >().adjoint().solveInPlace(B)
The matrix class, also used for vectors and row-vectors.
#define EIGEN_UNUSED_VARIABLE(var)
Definition: Macros.h:618


gtsam
Author(s):
autogenerated on Sat May 8 2021 02:43:54