cxx11_tensor_fixed_size.cpp File Reference
#include "main.h"
#include <Eigen/CXX11/Tensor>

Functions

static void test_0d ()
 
static void test_1d ()
 
static void test_tensor_map ()
 
static void test_2d ()
 
static void test_3d ()
 
static void test_array ()
 
 EIGEN_DECLARE_TEST (cxx11_tensor_fixed_size)
 

Function Documentation

◆ EIGEN_DECLARE_TEST()

EIGEN_DECLARE_TEST ( cxx11_tensor_fixed_size  )
256  {
263 }
static void test_array()
Definition: cxx11_tensor_fixed_size.cpp:230
static void test_3d()
Definition: cxx11_tensor_fixed_size.cpp:187
static void test_0d()
Definition: cxx11_tensor_fixed_size.cpp:17
static void test_tensor_map()
Definition: cxx11_tensor_fixed_size.cpp:109
static void test_2d()
Definition: cxx11_tensor_fixed_size.cpp:138
static void test_1d()
Definition: cxx11_tensor_fixed_size.cpp:45
#define CALL_SUBTEST(FUNC)
Definition: main.h:382

References CALL_SUBTEST, test_0d(), test_1d(), test_2d(), test_3d(), test_array(), and test_tensor_map().

◆ test_0d()

static void test_0d ( )
static
17  {
20  VERIFY_IS_EQUAL(scalar1.rank(), 0);
21  VERIFY_IS_EQUAL(scalar1.size(), 1);
23 
24  scalar1() = 7.0;
25  scalar2() = 13.0;
26 
27  // Test against shallow copy.
29  VERIFY_IS_NOT_EQUAL(scalar1.data(), copy.data());
30  VERIFY_IS_APPROX(scalar1(), copy());
31  copy = scalar1;
32  VERIFY_IS_NOT_EQUAL(scalar1.data(), copy.data());
33  VERIFY_IS_APPROX(scalar1(), copy());
34 
35  TensorFixedSize<float, Sizes<> > scalar3 = scalar1.sqrt();
36  TensorFixedSize<float, Sizes<>, RowMajor> scalar4 = scalar2.sqrt();
37  VERIFY_IS_EQUAL(scalar3.rank(), 0);
38  VERIFY_IS_APPROX(scalar3(), sqrtf(7.0));
39  VERIFY_IS_APPROX(scalar4(), sqrtf(13.0));
40 
41  scalar3 = scalar1 + scalar2;
42  VERIFY_IS_APPROX(scalar3(), 7.0f + 13.0f);
43 }
The fixed sized version of the tensor class.
Definition: TensorFixedSize.h:30
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Index size() const
Definition: TensorFixedSize.h:67
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Index rank() const
Definition: TensorFixedSize.h:64
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Scalar * data()
Definition: TensorFixedSize.h:68
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const Dimensions dimensions() const
Definition: TensorFixedSize.h:66
@ RowMajor
Definition: Constants.h:320
#define VERIFY_IS_APPROX(a, b)
Definition: integer_types.cpp:13
EIGEN_BLAS_FUNC() copy(int *n, RealScalar *px, int *incx, RealScalar *py, int *incy)
Definition: level1_impl.h:32
#define VERIFY_IS_NOT_EQUAL(a, b)
Definition: main.h:368
#define VERIFY_IS_EQUAL(a, b)
Definition: main.h:367
constexpr EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE auto array_prod(const array< T, N > &arr) -> decltype(array_reduce< product_op, T, N >(arr, static_cast< T >(1)))
Definition: MoreMeta.h:497

References Eigen::internal::array_prod(), copy(), Eigen::TensorFixedSize< Scalar_, Dimensions_, Options_, IndexType >::data(), Eigen::TensorFixedSize< Scalar_, Dimensions_, Options_, IndexType >::dimensions(), Eigen::TensorFixedSize< Scalar_, Dimensions_, Options_, IndexType >::rank(), Eigen::RowMajor, Eigen::TensorFixedSize< Scalar_, Dimensions_, Options_, IndexType >::size(), VERIFY_IS_APPROX, VERIFY_IS_EQUAL, and VERIFY_IS_NOT_EQUAL.

Referenced by EIGEN_DECLARE_TEST().

◆ test_1d()

static void test_1d ( )
static
45  {
48 
49  VERIFY_IS_EQUAL((vec1.size()), 6);
50  // VERIFY_IS_EQUAL((vec1.dimensions()[0]), 6);
51  // VERIFY_IS_EQUAL((vec1.dimension(0)), 6);
52 
53  vec1(0) = 4.0;
54  vec2(0) = 0.0;
55  vec1(1) = 8.0;
56  vec2(1) = 1.0;
57  vec1(2) = 15.0;
58  vec2(2) = 2.0;
59  vec1(3) = 16.0;
60  vec2(3) = 3.0;
61  vec1(4) = 23.0;
62  vec2(4) = 4.0;
63  vec1(5) = 42.0;
64  vec2(5) = 5.0;
65 
66  // Test against shallow copy.
68  VERIFY_IS_NOT_EQUAL(vec1.data(), copy.data());
69  for (int i = 0; i < 6; ++i) {
71  }
72  copy = vec1;
73  VERIFY_IS_NOT_EQUAL(vec1.data(), copy.data());
74  for (int i = 0; i < 6; ++i) {
76  }
77 
78  TensorFixedSize<float, Sizes<6> > vec3 = vec1.sqrt();
79  TensorFixedSize<float, Sizes<6>, RowMajor> vec4 = vec2.sqrt();
80 
81  VERIFY_IS_EQUAL((vec3.size()), 6);
82  VERIFY_IS_EQUAL(vec3.rank(), 1);
83  // VERIFY_IS_EQUAL((vec3.dimensions()[0]), 6);
84  // VERIFY_IS_EQUAL((vec3.dimension(0)), 6);
85 
86  VERIFY_IS_APPROX(vec3(0), sqrtf(4.0));
87  VERIFY_IS_APPROX(vec3(1), sqrtf(8.0));
88  VERIFY_IS_APPROX(vec3(2), sqrtf(15.0));
89  VERIFY_IS_APPROX(vec3(3), sqrtf(16.0));
90  VERIFY_IS_APPROX(vec3(4), sqrtf(23.0));
91  VERIFY_IS_APPROX(vec3(5), sqrtf(42.0));
92 
93  VERIFY_IS_APPROX(vec4(0), sqrtf(0.0));
94  VERIFY_IS_APPROX(vec4(1), sqrtf(1.0));
95  VERIFY_IS_APPROX(vec4(2), sqrtf(2.0));
96  VERIFY_IS_APPROX(vec4(3), sqrtf(3.0));
97  VERIFY_IS_APPROX(vec4(4), sqrtf(4.0));
98  VERIFY_IS_APPROX(vec4(5), sqrtf(5.0));
99 
100  vec3 = vec1 + vec2;
101  VERIFY_IS_APPROX(vec3(0), 4.0f + 0.0f);
102  VERIFY_IS_APPROX(vec3(1), 8.0f + 1.0f);
103  VERIFY_IS_APPROX(vec3(2), 15.0f + 2.0f);
104  VERIFY_IS_APPROX(vec3(3), 16.0f + 3.0f);
105  VERIFY_IS_APPROX(vec3(4), 23.0f + 4.0f);
106  VERIFY_IS_APPROX(vec3(5), 42.0f + 5.0f);
107 }
int i
Definition: BiCGSTAB_step_by_step.cpp:9
RowVectorXd vec1(3)

References copy(), i, Eigen::TensorFixedSize< Scalar_, Dimensions_, Options_, IndexType >::rank(), Eigen::RowMajor, Eigen::TensorFixedSize< Scalar_, Dimensions_, Options_, IndexType >::size(), vec1(), VERIFY_IS_APPROX, VERIFY_IS_EQUAL, and VERIFY_IS_NOT_EQUAL.

Referenced by EIGEN_DECLARE_TEST().

◆ test_2d()

static void test_2d ( )
static
138  {
139  float data1[6];
141  float data2[6];
143 
144  VERIFY_IS_EQUAL((mat1.size()), 2 * 3);
145  VERIFY_IS_EQUAL(mat1.rank(), 2);
146  // VERIFY_IS_EQUAL((mat1.dimension(0)), 2);
147  // VERIFY_IS_EQUAL((mat1.dimension(1)), 3);
148 
149  mat1(0, 0) = 0.0;
150  mat1(0, 1) = 1.0;
151  mat1(0, 2) = 2.0;
152  mat1(1, 0) = 3.0;
153  mat1(1, 1) = 4.0;
154  mat1(1, 2) = 5.0;
155 
156  mat2(0, 0) = -0.0;
157  mat2(0, 1) = -1.0;
158  mat2(0, 2) = -2.0;
159  mat2(1, 0) = -3.0;
160  mat2(1, 1) = -4.0;
161  mat2(1, 2) = -5.0;
162 
165  mat3 = mat1.abs();
166  mat4 = mat2.abs();
167 
168  VERIFY_IS_EQUAL((mat3.size()), 2 * 3);
169  // VERIFY_IS_EQUAL((mat3.dimension(0)), 2);
170  // VERIFY_IS_EQUAL((mat3.dimension(1)), 3);
171 
172  VERIFY_IS_APPROX(mat3(0, 0), 0.0f);
173  VERIFY_IS_APPROX(mat3(0, 1), 1.0f);
174  VERIFY_IS_APPROX(mat3(0, 2), 2.0f);
175  VERIFY_IS_APPROX(mat3(1, 0), 3.0f);
176  VERIFY_IS_APPROX(mat3(1, 1), 4.0f);
177  VERIFY_IS_APPROX(mat3(1, 2), 5.0f);
178 
179  VERIFY_IS_APPROX(mat4(0, 0), 0.0f);
180  VERIFY_IS_APPROX(mat4(0, 1), 1.0f);
181  VERIFY_IS_APPROX(mat4(0, 2), 2.0f);
182  VERIFY_IS_APPROX(mat4(1, 0), 3.0f);
183  VERIFY_IS_APPROX(mat4(1, 1), 4.0f);
184  VERIFY_IS_APPROX(mat4(1, 2), 5.0f);
185 }
MatrixXd mat1(size, size)
A tensor expression mapping an existing array of data.
Definition: TensorMap.h:33

References mat1(), Eigen::RowMajor, Eigen::TensorFixedSize< Scalar_, Dimensions_, Options_, IndexType >::size(), VERIFY_IS_APPROX, and VERIFY_IS_EQUAL.

Referenced by EIGEN_DECLARE_TEST().

◆ test_3d()

static void test_3d ( )
static
187  {
190 
191  VERIFY_IS_EQUAL((mat1.size()), 2 * 3 * 7);
192  VERIFY_IS_EQUAL(mat1.rank(), 3);
193  // VERIFY_IS_EQUAL((mat1.dimension(0)), 2);
194  // VERIFY_IS_EQUAL((mat1.dimension(1)), 3);
195  // VERIFY_IS_EQUAL((mat1.dimension(2)), 7);
196 
197  float val = 0.0f;
198  for (int i = 0; i < 2; ++i) {
199  for (int j = 0; j < 3; ++j) {
200  for (int k = 0; k < 7; ++k) {
201  mat1(i, j, k) = val;
202  mat2(i, j, k) = val;
203  val += 1.0f;
204  }
205  }
206  }
207 
209  mat3 = mat1.sqrt();
211  mat4 = mat2.sqrt();
212 
213  VERIFY_IS_EQUAL((mat3.size()), 2 * 3 * 7);
214  // VERIFY_IS_EQUAL((mat3.dimension(0)), 2);
215  // VERIFY_IS_EQUAL((mat3.dimension(1)), 3);
216  // VERIFY_IS_EQUAL((mat3.dimension(2)), 7);
217 
218  val = 0.0f;
219  for (int i = 0; i < 2; ++i) {
220  for (int j = 0; j < 3; ++j) {
221  for (int k = 0; k < 7; ++k) {
222  VERIFY_IS_APPROX(mat3(i, j, k), sqrtf(val));
223  VERIFY_IS_APPROX(mat4(i, j, k), sqrtf(val));
224  val += 1.0f;
225  }
226  }
227  }
228 }
char char char int int * k
Definition: level2_impl.h:374
val
Definition: calibrate.py:119
std::ptrdiff_t j
Definition: tut_arithmetic_redux_minmax.cpp:2

References i, j, k, mat1(), Eigen::RowMajor, Eigen::TensorFixedSize< Scalar_, Dimensions_, Options_, IndexType >::size(), calibrate::val, VERIFY_IS_APPROX, and VERIFY_IS_EQUAL.

Referenced by EIGEN_DECLARE_TEST().

◆ test_array()

static void test_array ( )
static
230  {
232  float val = 0.0f;
233  for (int i = 0; i < 2; ++i) {
234  for (int j = 0; j < 3; ++j) {
235  for (int k = 0; k < 7; ++k) {
236  mat1(i, j, k) = val;
237  val += 1.0f;
238  }
239  }
240  }
241 
243  mat3 = mat1.pow(3.5f);
244 
245  val = 0.0f;
246  for (int i = 0; i < 2; ++i) {
247  for (int j = 0; j < 3; ++j) {
248  for (int k = 0; k < 7; ++k) {
249  VERIFY_IS_APPROX(mat3(i, j, k), powf(val, 3.5f));
250  val += 1.0f;
251  }
252  }
253  }
254 }

References i, j, k, mat1(), calibrate::val, and VERIFY_IS_APPROX.

Referenced by EIGEN_DECLARE_TEST().

◆ test_tensor_map()

static void test_tensor_map ( )
static
109  {
112 
113  vec1(0) = 4.0;
114  vec2(0) = 0.0;
115  vec1(1) = 8.0;
116  vec2(1) = 1.0;
117  vec1(2) = 15.0;
118  vec2(2) = 2.0;
119  vec1(3) = 16.0;
120  vec2(3) = 3.0;
121  vec1(4) = 23.0;
122  vec2(4) = 4.0;
123  vec1(5) = 42.0;
124  vec2(5) = 5.0;
125 
126  float data3[6];
128  vec3 = vec1.sqrt() + vec2;
129 
130  VERIFY_IS_APPROX(vec3(0), sqrtf(4.0));
131  VERIFY_IS_APPROX(vec3(1), sqrtf(8.0) + 1.0f);
132  VERIFY_IS_APPROX(vec3(2), sqrtf(15.0) + 2.0f);
133  VERIFY_IS_APPROX(vec3(3), sqrtf(16.0) + 3.0f);
134  VERIFY_IS_APPROX(vec3(4), sqrtf(23.0) + 4.0f);
135  VERIFY_IS_APPROX(vec3(5), sqrtf(42.0) + 5.0f);
136 }

References Eigen::RowMajor, vec1(), and VERIFY_IS_APPROX.

Referenced by EIGEN_DECLARE_TEST().