unaryview.cpp File Reference
#include "main.h"

Functions

template<int OuterStride, int InnerStride, typename VectorType >
void unaryview_stride (const VectorType &m)
 
void test_mutable_unaryview ()
 
void test_unaryview_solve ()
 
 EIGEN_DECLARE_TEST (unaryviewstride)
 

Function Documentation

◆ EIGEN_DECLARE_TEST()

EIGEN_DECLARE_TEST ( unaryviewstride  )
100  {
101  CALL_SUBTEST_1((unaryview_stride<1, 2>(MatrixXf())));
102  CALL_SUBTEST_1((unaryview_stride<0, 0>(MatrixXf())));
103  CALL_SUBTEST_2((unaryview_stride<1, 2>(VectorXf())));
104  CALL_SUBTEST_2((unaryview_stride<0, 0>(VectorXf())));
105  CALL_SUBTEST_3((unaryview_stride<1, 2>(RowVectorXf())));
106  CALL_SUBTEST_3((unaryview_stride<0, 0>(RowVectorXf())));
109 }
#define CALL_SUBTEST_3(FUNC)
Definition: split_test_helper.h:16
#define CALL_SUBTEST_1(FUNC)
Definition: split_test_helper.h:4
#define CALL_SUBTEST_2(FUNC)
Definition: split_test_helper.h:10
#define CALL_SUBTEST_4(FUNC)
Definition: split_test_helper.h:22
void test_unaryview_solve()
Definition: unaryview.cpp:51
void test_mutable_unaryview()
Definition: unaryview.cpp:28

References CALL_SUBTEST_1, CALL_SUBTEST_2, CALL_SUBTEST_3, CALL_SUBTEST_4, test_mutable_unaryview(), and test_unaryview_solve().

◆ test_mutable_unaryview()

void test_mutable_unaryview ( )
28  {
29  struct Vec3 {
30  double x;
31  double y;
32  double z;
33  };
34 
36  auto x_view = m.unaryViewExpr([](Vec3& v) -> double& { return v.x; });
37  auto y_view = m.unaryViewExpr([](Vec3& v) -> double& { return v.y; });
38  auto z_view = m.unaryViewExpr([](Vec3& v) -> double& { return v.z; });
39 
40  x_view.setConstant(1);
41  y_view.setConstant(2);
42  z_view.setConstant(3);
43 
44  for (int i = 0; i < m.size(); ++i) {
45  VERIFY_IS_EQUAL(m(i).x, 1);
46  VERIFY_IS_EQUAL(m(i).y, 2);
47  VERIFY_IS_EQUAL(m(i).z, 3);
48  }
49 }
Array< int, Dynamic, 1 > v
Definition: Array_initializer_list_vector_cxx11.cpp:1
int i
Definition: BiCGSTAB_step_by_step.cpp:9
The matrix class, also used for vectors and row-vectors.
Definition: Eigen/Eigen/src/Core/Matrix.h:186
Scalar * y
Definition: level1_cplx_impl.h:128
int * m
Definition: level2_cplx_impl.h:294
#define VERIFY_IS_EQUAL(a, b)
Definition: main.h:367
list x
Definition: plotDoE.py:28

References i, m, v, VERIFY_IS_EQUAL, plotDoE::x, and y.

Referenced by EIGEN_DECLARE_TEST().

◆ test_unaryview_solve()

void test_unaryview_solve ( )
51  {
52  // Random upper-triangular system.
53  Eigen::MatrixXd A = Eigen::MatrixXd::Random(5, 5);
54  A.triangularView<Eigen::Lower>().setZero();
55  A.diagonal().setRandom();
56  Eigen::VectorXd b = Eigen::VectorXd::Random(5);
57 
58  struct trivial_view_op {
59  double& operator()(double& x) const { return x; }
60  const double& operator()(const double& x) const { return x; }
61  };
62 
63  // Non-const view:
64  {
65  auto b_view = b.unaryViewExpr(trivial_view_op());
66  b_view(0) = 1; // Allows modification.
67  Eigen::VectorXd x = A.triangularView<Eigen::Upper>().solve(b_view);
68  VERIFY_IS_APPROX(A * x, b);
69  }
70 
71  // Const view:
72  {
73  const auto b_view = b.unaryViewExpr(trivial_view_op());
74  Eigen::VectorXd x = A.triangularView<Eigen::Upper>().solve(b_view);
75  VERIFY_IS_APPROX(A * x, b);
76  }
77 
78  // Non-const view of const matrix:
79  {
80  const Eigen::VectorXd const_b = b;
81  auto b_view = const_b.unaryViewExpr(trivial_view_op());
82  Eigen::VectorXd x = A.triangularView<Eigen::Upper>().solve(b_view);
83  VERIFY_IS_APPROX(A * x, b);
84  }
85 
86  // Const view of const matrix:
87  {
88  const Eigen::VectorXd const_b = b;
89  const auto b_view = const_b.unaryViewExpr(trivial_view_op());
90  Eigen::VectorXd x = A.triangularView<Eigen::Upper>().solve(b_view);
91  VERIFY_IS_APPROX(A * x, b);
92  }
93 
94  // Eigen::MatrixXd out =
95  // mat_in.real()
96  // .triangularView<Eigen::Upper>()
97  // .solve(mat_in.unaryViewExpr([&](const auto& x){ return std::real(x); }));
98 }
Scalar * b
Definition: benchVecAdd.cpp:17
Derived & setRandom(Index size)
Definition: Random.h:147
@ Lower
Definition: Constants.h:211
@ Upper
Definition: Constants.h:213
#define VERIFY_IS_APPROX(a, b)
Definition: integer_types.cpp:13
res setZero()
Update the problem specs before solve
Definition: steady_axisym_advection_diffusion.cc:353

References b, Eigen::Lower, Eigen::PlainObjectBase< Derived >::setRandom(), setZero(), solve, Eigen::Upper, VERIFY_IS_APPROX, and plotDoE::x.

Referenced by EIGEN_DECLARE_TEST().

◆ unaryview_stride()

template<int OuterStride, int InnerStride, typename VectorType >
void unaryview_stride ( const VectorType m)
13  {
14  typedef typename VectorType::Scalar Scalar;
15  Index rows = m.rows();
16  Index cols = m.cols();
17  VectorType vec = VectorType::Random(rows, cols);
18 
19  struct view_op {
20  EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const Scalar& operator()(const Scalar& v) const { return v; }
21  };
22 
24  VERIFY(vec_view.outerStride() == (OuterStride == 0 ? 0 : OuterStride));
25  VERIFY(vec_view.innerStride() == (InnerStride == 0 ? 1 : InnerStride));
26 }
#define EIGEN_DEVICE_FUNC
Definition: Macros.h:892
#define EIGEN_STRONG_INLINE
Definition: Macros.h:834
int rows
Definition: Tutorial_commainit_02.cpp:1
int cols
Definition: Tutorial_commainit_02.cpp:1
SCALAR Scalar
Definition: bench_gemm.cpp:45
Generic lvalue expression of a coefficient-wise unary operator of a matrix or a vector.
Definition: CwiseUnaryView.h:135
Convenience specialization of Stride to specify only an inner stride See class Map for some examples.
Definition: Stride.h:93
Convenience specialization of Stride to specify only an outer stride See class Map for some examples.
Definition: Stride.h:104
#define VERIFY(a)
Definition: main.h:362
EIGEN_DEFAULT_DENSE_INDEX_TYPE Index
The Index type as used for the API.
Definition: Meta.h:83
Definition: fft_test_shared.h:66

References cols, EIGEN_DEVICE_FUNC, EIGEN_STRONG_INLINE, m, rows, v, and VERIFY.