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

Functions

static void test_1d ()
 
static void test_2d ()
 
static void test_3d ()
 
static void test_same_type ()
 
static void test_auto_resize ()
 
static void test_compound_assign ()
 
static void test_std_initializers_tensor ()
 
 EIGEN_DECLARE_TEST (cxx11_tensor_assign)
 

Function Documentation

◆ EIGEN_DECLARE_TEST()

EIGEN_DECLARE_TEST ( cxx11_tensor_assign  )
351  {
359 }
static void test_compound_assign()
Definition: cxx11_tensor_assign.cpp:250
static void test_same_type()
Definition: cxx11_tensor_assign.cpp:186
static void test_3d()
Definition: cxx11_tensor_assign.cpp:135
static void test_auto_resize()
Definition: cxx11_tensor_assign.cpp:227
static void test_2d()
Definition: cxx11_tensor_assign.cpp:75
static void test_1d()
Definition: cxx11_tensor_assign.cpp:17
static void test_std_initializers_tensor()
Definition: cxx11_tensor_assign.cpp:281
#define CALL_SUBTEST(FUNC)
Definition: main.h:382

References CALL_SUBTEST, test_1d(), test_2d(), test_3d(), test_auto_resize(), test_compound_assign(), test_same_type(), and test_std_initializers_tensor().

◆ test_1d()

static void test_1d ( )
static
17  {
20  vec1(0) = 4;
21  vec2(0) = 0;
22  vec1(1) = 8;
23  vec2(1) = 1;
24  vec1(2) = 15;
25  vec2(2) = 2;
26  vec1(3) = 16;
27  vec2(3) = 3;
28  vec1(4) = 23;
29  vec2(4) = 4;
30  vec1(5) = 42;
31  vec2(5) = 5;
32 
33  int col_major[6] = {0};
34  int row_major[6] = {0};
35  TensorMap<Tensor<int, 1> > vec3(col_major, 6);
36  TensorMap<Tensor<int, 1, RowMajor> > vec4(row_major, 6);
37 
38  vec3 = vec1;
39  vec4 = vec2;
40 
41  VERIFY_IS_EQUAL(vec3(0), 4);
42  VERIFY_IS_EQUAL(vec3(1), 8);
43  VERIFY_IS_EQUAL(vec3(2), 15);
44  VERIFY_IS_EQUAL(vec3(3), 16);
45  VERIFY_IS_EQUAL(vec3(4), 23);
46  VERIFY_IS_EQUAL(vec3(5), 42);
47 
48  VERIFY_IS_EQUAL(vec4(0), 0);
49  VERIFY_IS_EQUAL(vec4(1), 1);
50  VERIFY_IS_EQUAL(vec4(2), 2);
51  VERIFY_IS_EQUAL(vec4(3), 3);
52  VERIFY_IS_EQUAL(vec4(4), 4);
53  VERIFY_IS_EQUAL(vec4(5), 5);
54 
55  vec1.setZero();
56  vec2.setZero();
57  vec1 = vec3;
58  vec2 = vec4;
59 
60  VERIFY_IS_EQUAL(vec1(0), 4);
61  VERIFY_IS_EQUAL(vec1(1), 8);
62  VERIFY_IS_EQUAL(vec1(2), 15);
63  VERIFY_IS_EQUAL(vec1(3), 16);
64  VERIFY_IS_EQUAL(vec1(4), 23);
65  VERIFY_IS_EQUAL(vec1(5), 42);
66 
67  VERIFY_IS_EQUAL(vec2(0), 0);
68  VERIFY_IS_EQUAL(vec2(1), 1);
69  VERIFY_IS_EQUAL(vec2(2), 2);
70  VERIFY_IS_EQUAL(vec2(3), 3);
71  VERIFY_IS_EQUAL(vec2(4), 4);
72  VERIFY_IS_EQUAL(vec2(5), 5);
73 }
RowVectorXd vec1(3)
A tensor expression mapping an existing array of data.
Definition: TensorMap.h:33
The tensor class.
Definition: Tensor.h:68
#define VERIFY_IS_EQUAL(a, b)
Definition: main.h:367

References Eigen::TensorBase< Derived, AccessLevel >::setZero(), vec1(), and VERIFY_IS_EQUAL.

Referenced by EIGEN_DECLARE_TEST().

◆ test_2d()

static void test_2d ( )
static
75  {
76  Tensor<int, 2> mat1(2, 3);
77  Tensor<int, 2, RowMajor> mat2(2, 3);
78 
79  mat1(0, 0) = 0;
80  mat1(0, 1) = 1;
81  mat1(0, 2) = 2;
82  mat1(1, 0) = 3;
83  mat1(1, 1) = 4;
84  mat1(1, 2) = 5;
85 
86  mat2(0, 0) = 0;
87  mat2(0, 1) = 1;
88  mat2(0, 2) = 2;
89  mat2(1, 0) = 3;
90  mat2(1, 1) = 4;
91  mat2(1, 2) = 5;
92 
93  int col_major[6] = {0};
94  int row_major[6] = {0};
95  TensorMap<Tensor<int, 2> > mat3(row_major, 2, 3);
96  TensorMap<Tensor<int, 2, RowMajor> > mat4(col_major, 2, 3);
97 
98  mat3 = mat1;
99  mat4 = mat2;
100 
101  VERIFY_IS_EQUAL(mat3(0, 0), 0);
102  VERIFY_IS_EQUAL(mat3(0, 1), 1);
103  VERIFY_IS_EQUAL(mat3(0, 2), 2);
104  VERIFY_IS_EQUAL(mat3(1, 0), 3);
105  VERIFY_IS_EQUAL(mat3(1, 1), 4);
106  VERIFY_IS_EQUAL(mat3(1, 2), 5);
107 
108  VERIFY_IS_EQUAL(mat4(0, 0), 0);
109  VERIFY_IS_EQUAL(mat4(0, 1), 1);
110  VERIFY_IS_EQUAL(mat4(0, 2), 2);
111  VERIFY_IS_EQUAL(mat4(1, 0), 3);
112  VERIFY_IS_EQUAL(mat4(1, 1), 4);
113  VERIFY_IS_EQUAL(mat4(1, 2), 5);
114 
115  mat1.setZero();
116  mat2.setZero();
117  mat1 = mat3;
118  mat2 = mat4;
119 
120  VERIFY_IS_EQUAL(mat1(0, 0), 0);
121  VERIFY_IS_EQUAL(mat1(0, 1), 1);
122  VERIFY_IS_EQUAL(mat1(0, 2), 2);
123  VERIFY_IS_EQUAL(mat1(1, 0), 3);
124  VERIFY_IS_EQUAL(mat1(1, 1), 4);
125  VERIFY_IS_EQUAL(mat1(1, 2), 5);
126 
127  VERIFY_IS_EQUAL(mat2(0, 0), 0);
128  VERIFY_IS_EQUAL(mat2(0, 1), 1);
129  VERIFY_IS_EQUAL(mat2(0, 2), 2);
130  VERIFY_IS_EQUAL(mat2(1, 0), 3);
131  VERIFY_IS_EQUAL(mat2(1, 1), 4);
132  VERIFY_IS_EQUAL(mat2(1, 2), 5);
133 }
MatrixXd mat1(size, size)

References mat1(), Eigen::TensorBase< Derived, AccessLevel >::setZero(), and VERIFY_IS_EQUAL.

Referenced by EIGEN_DECLARE_TEST().

◆ test_3d()

static void test_3d ( )
static
135  {
136  Tensor<int, 3> mat1(2, 3, 7);
137  Tensor<int, 3, RowMajor> mat2(2, 3, 7);
138 
139  int val = 0;
140  for (int i = 0; i < 2; ++i) {
141  for (int j = 0; j < 3; ++j) {
142  for (int k = 0; k < 7; ++k) {
143  mat1(i, j, k) = val;
144  mat2(i, j, k) = val;
145  val++;
146  }
147  }
148  }
149 
150  int col_major[2 * 3 * 7] = {0};
151  int row_major[2 * 3 * 7] = {0};
152  TensorMap<Tensor<int, 3> > mat3(col_major, 2, 3, 7);
153  TensorMap<Tensor<int, 3, RowMajor> > mat4(row_major, 2, 3, 7);
154 
155  mat3 = mat1;
156  mat4 = mat2;
157 
158  val = 0;
159  for (int i = 0; i < 2; ++i) {
160  for (int j = 0; j < 3; ++j) {
161  for (int k = 0; k < 7; ++k) {
162  VERIFY_IS_EQUAL(mat3(i, j, k), val);
163  VERIFY_IS_EQUAL(mat4(i, j, k), val);
164  val++;
165  }
166  }
167  }
168 
169  mat1.setZero();
170  mat2.setZero();
171  mat1 = mat3;
172  mat2 = mat4;
173 
174  val = 0;
175  for (int i = 0; i < 2; ++i) {
176  for (int j = 0; j < 3; ++j) {
177  for (int k = 0; k < 7; ++k) {
178  VERIFY_IS_EQUAL(mat1(i, j, k), val);
179  VERIFY_IS_EQUAL(mat2(i, j, k), val);
180  val++;
181  }
182  }
183  }
184 }
int i
Definition: BiCGSTAB_step_by_step.cpp:9
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::TensorBase< Derived, AccessLevel >::setZero(), calibrate::val, and VERIFY_IS_EQUAL.

Referenced by EIGEN_DECLARE_TEST().

◆ test_auto_resize()

static void test_auto_resize ( )
static
227  {
228  Tensor<int, 1> tensor1;
229  Tensor<int, 1> tensor2(3);
230  Tensor<int, 1> tensor3(5);
231  Tensor<int, 1> tensor4(7);
232 
233  Tensor<int, 1> new_tensor(5);
234  new_tensor.setRandom();
235 
236  tensor1 = tensor2 = tensor3 = tensor4 = new_tensor;
237 
238  VERIFY_IS_EQUAL(tensor1.dimension(0), new_tensor.dimension(0));
239  VERIFY_IS_EQUAL(tensor2.dimension(0), new_tensor.dimension(0));
240  VERIFY_IS_EQUAL(tensor3.dimension(0), new_tensor.dimension(0));
241  VERIFY_IS_EQUAL(tensor4.dimension(0), new_tensor.dimension(0));
242  for (int i = 0; i < new_tensor.dimension(0); ++i) {
243  VERIFY_IS_EQUAL(tensor1(i), new_tensor(i));
244  VERIFY_IS_EQUAL(tensor2(i), new_tensor(i));
245  VERIFY_IS_EQUAL(tensor3(i), new_tensor(i));
246  VERIFY_IS_EQUAL(tensor4(i), new_tensor(i));
247  }
248 }
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Index dimension(std::size_t n) const
Definition: Tensor.h:99

References Eigen::Tensor< Scalar_, NumIndices_, Options_, IndexType_ >::dimension(), i, Eigen::TensorBase< Derived, AccessLevel >::setRandom(), and VERIFY_IS_EQUAL.

Referenced by EIGEN_DECLARE_TEST().

◆ test_compound_assign()

static void test_compound_assign ( )
static
250  {
251  Tensor<int, 1> start_tensor(10);
252  Tensor<int, 1> offset_tensor(10);
253  start_tensor.setRandom();
254  offset_tensor.setRandom();
255 
256  Tensor<int, 1> tensor = start_tensor;
257  tensor += offset_tensor;
258  for (int i = 0; i < 10; ++i) {
259  VERIFY_IS_EQUAL(tensor(i), start_tensor(i) + offset_tensor(i));
260  }
261 
262  tensor = start_tensor;
263  tensor -= offset_tensor;
264  for (int i = 0; i < 10; ++i) {
265  VERIFY_IS_EQUAL(tensor(i), start_tensor(i) - offset_tensor(i));
266  }
267 
268  tensor = start_tensor;
269  tensor *= offset_tensor;
270  for (int i = 0; i < 10; ++i) {
271  VERIFY_IS_EQUAL(tensor(i), start_tensor(i) * offset_tensor(i));
272  }
273 
274  tensor = start_tensor;
275  tensor /= offset_tensor;
276  for (int i = 0; i < 10; ++i) {
277  VERIFY_IS_EQUAL(tensor(i), start_tensor(i) / offset_tensor(i));
278  }
279 }

References i, Eigen::TensorBase< Derived, AccessLevel >::setRandom(), and VERIFY_IS_EQUAL.

Referenced by EIGEN_DECLARE_TEST().

◆ test_same_type()

static void test_same_type ( )
static
186  {
187  Tensor<int, 1> orig_tensor(5);
188  Tensor<int, 1> dest_tensor(5);
189  orig_tensor.setRandom();
190  dest_tensor.setRandom();
191  int* orig_data = orig_tensor.data();
192  int* dest_data = dest_tensor.data();
193  dest_tensor = orig_tensor;
194  VERIFY_IS_EQUAL(orig_tensor.data(), orig_data);
195  VERIFY_IS_EQUAL(dest_tensor.data(), dest_data);
196  for (int i = 0; i < 5; ++i) {
197  VERIFY_IS_EQUAL(dest_tensor(i), orig_tensor(i));
198  }
199 
200  TensorFixedSize<int, Sizes<5> > orig_array;
201  TensorFixedSize<int, Sizes<5> > dest_array;
202  orig_array.setRandom();
203  dest_array.setRandom();
204  orig_data = orig_array.data();
205  dest_data = dest_array.data();
206  dest_array = orig_array;
207  VERIFY_IS_EQUAL(orig_array.data(), orig_data);
208  VERIFY_IS_EQUAL(dest_array.data(), dest_data);
209  for (int i = 0; i < 5; ++i) {
210  VERIFY_IS_EQUAL(dest_array(i), orig_array(i));
211  }
212 
213  int orig[5] = {1, 2, 3, 4, 5};
214  int dest[5] = {6, 7, 8, 9, 10};
215  TensorMap<Tensor<int, 1> > orig_map(orig, 5);
216  TensorMap<Tensor<int, 1> > dest_map(dest, 5);
217  orig_data = orig_map.data();
218  dest_data = dest_map.data();
219  dest_map = orig_map;
220  VERIFY_IS_EQUAL(orig_map.data(), orig_data);
221  VERIFY_IS_EQUAL(dest_map.data(), dest_data);
222  for (int i = 0; i < 5; ++i) {
223  VERIFY_IS_EQUAL(dest[i], i + 1);
224  }
225 }
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Derived & setRandom()
Definition: TensorBase.h:1049
The fixed sized version of the tensor class.
Definition: TensorFixedSize.h:30
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Scalar * data()
Definition: TensorFixedSize.h:68

References Eigen::Tensor< Scalar_, NumIndices_, Options_, IndexType_ >::data(), Eigen::TensorFixedSize< Scalar_, Dimensions_, Options_, IndexType >::data(), Eigen::TensorMap< PlainObjectType, Options_, MakePointer_ >::data(), i, Eigen::TensorBase< Derived, AccessLevel >::setRandom(), and VERIFY_IS_EQUAL.

Referenced by EIGEN_DECLARE_TEST().

◆ test_std_initializers_tensor()

static void test_std_initializers_tensor ( )
static
281  {
282  Tensor<int, 1> a(3);
283  a.setValues({0, 1, 2});
284  VERIFY_IS_EQUAL(a(0), 0);
285  VERIFY_IS_EQUAL(a(1), 1);
286  VERIFY_IS_EQUAL(a(2), 2);
287 
288  // It fills the top-left slice.
289  a.setValues({10, 20});
290  VERIFY_IS_EQUAL(a(0), 10);
291  VERIFY_IS_EQUAL(a(1), 20);
292  VERIFY_IS_EQUAL(a(2), 2);
293 
294  // Chaining.
295  Tensor<int, 1> a2(3);
296  a2 = a.setValues({100, 200, 300});
297  VERIFY_IS_EQUAL(a(0), 100);
298  VERIFY_IS_EQUAL(a(1), 200);
299  VERIFY_IS_EQUAL(a(2), 300);
300  VERIFY_IS_EQUAL(a2(0), 100);
301  VERIFY_IS_EQUAL(a2(1), 200);
302  VERIFY_IS_EQUAL(a2(2), 300);
303 
304  Tensor<int, 2> b(2, 3);
305  b.setValues({{0, 1, 2}, {3, 4, 5}});
306  VERIFY_IS_EQUAL(b(0, 0), 0);
307  VERIFY_IS_EQUAL(b(0, 1), 1);
308  VERIFY_IS_EQUAL(b(0, 2), 2);
309  VERIFY_IS_EQUAL(b(1, 0), 3);
310  VERIFY_IS_EQUAL(b(1, 1), 4);
311  VERIFY_IS_EQUAL(b(1, 2), 5);
312 
313  // It fills the top-left slice.
314  b.setValues({{10, 20}, {30}});
315  VERIFY_IS_EQUAL(b(0, 0), 10);
316  VERIFY_IS_EQUAL(b(0, 1), 20);
317  VERIFY_IS_EQUAL(b(0, 2), 2);
318  VERIFY_IS_EQUAL(b(1, 0), 30);
319  VERIFY_IS_EQUAL(b(1, 1), 4);
320  VERIFY_IS_EQUAL(b(1, 2), 5);
321 
322  Eigen::Tensor<int, 3> c(3, 2, 4);
323  c.setValues(
324  {{{0, 1, 2, 3}, {4, 5, 6, 7}}, {{10, 11, 12, 13}, {14, 15, 16, 17}}, {{20, 21, 22, 23}, {24, 25, 26, 27}}});
325  VERIFY_IS_EQUAL(c(0, 0, 0), 0);
326  VERIFY_IS_EQUAL(c(0, 0, 1), 1);
327  VERIFY_IS_EQUAL(c(0, 0, 2), 2);
328  VERIFY_IS_EQUAL(c(0, 0, 3), 3);
329  VERIFY_IS_EQUAL(c(0, 1, 0), 4);
330  VERIFY_IS_EQUAL(c(0, 1, 1), 5);
331  VERIFY_IS_EQUAL(c(0, 1, 2), 6);
332  VERIFY_IS_EQUAL(c(0, 1, 3), 7);
333  VERIFY_IS_EQUAL(c(1, 0, 0), 10);
334  VERIFY_IS_EQUAL(c(1, 0, 1), 11);
335  VERIFY_IS_EQUAL(c(1, 0, 2), 12);
336  VERIFY_IS_EQUAL(c(1, 0, 3), 13);
337  VERIFY_IS_EQUAL(c(1, 1, 0), 14);
338  VERIFY_IS_EQUAL(c(1, 1, 1), 15);
339  VERIFY_IS_EQUAL(c(1, 1, 2), 16);
340  VERIFY_IS_EQUAL(c(1, 1, 3), 17);
341  VERIFY_IS_EQUAL(c(2, 0, 0), 20);
342  VERIFY_IS_EQUAL(c(2, 0, 1), 21);
343  VERIFY_IS_EQUAL(c(2, 0, 2), 22);
344  VERIFY_IS_EQUAL(c(2, 0, 3), 23);
345  VERIFY_IS_EQUAL(c(2, 1, 0), 24);
346  VERIFY_IS_EQUAL(c(2, 1, 1), 25);
347  VERIFY_IS_EQUAL(c(2, 1, 2), 26);
348  VERIFY_IS_EQUAL(c(2, 1, 3), 27);
349 }
Scalar * b
Definition: benchVecAdd.cpp:17
const Scalar * a
Definition: level2_cplx_impl.h:32
int c
Definition: calibrate.py:100

References a, b, calibrate::c, and VERIFY_IS_EQUAL.

Referenced by EIGEN_DECLARE_TEST().