cxx11_tensor_scan.cpp File Reference
#include "main.h"
#include <limits>
#include <numeric>
#include <Eigen/CXX11/Tensor>

Functions

template<int DataLayout, typename Type = float, bool Exclusive = false>
static void test_1d_scan ()
 
template<int DataLayout, typename Type = float>
static void test_4d_scan ()
 
template<int DataLayout>
static void test_tensor_maps ()
 
 EIGEN_DECLARE_TEST (cxx11_tensor_scan)
 

Function Documentation

◆ EIGEN_DECLARE_TEST()

EIGEN_DECLARE_TEST ( cxx11_tensor_scan  )
99  {
100  CALL_SUBTEST((test_1d_scan<ColMajor, float, true>()));
101  CALL_SUBTEST((test_1d_scan<ColMajor, float, false>()));
102  CALL_SUBTEST((test_1d_scan<RowMajor, float, true>()));
103  CALL_SUBTEST((test_1d_scan<RowMajor, float, false>()));
104  CALL_SUBTEST(test_4d_scan<ColMajor>());
105  CALL_SUBTEST(test_4d_scan<RowMajor>());
106  CALL_SUBTEST(test_tensor_maps<ColMajor>());
107  CALL_SUBTEST(test_tensor_maps<RowMajor>());
108 }
#define CALL_SUBTEST(FUNC)
Definition: main.h:382

References CALL_SUBTEST.

◆ test_1d_scan()

template<int DataLayout, typename Type = float, bool Exclusive = false>
static void test_1d_scan ( )
static
18  {
19  int size = 50;
21  tensor.setRandom();
22  Tensor<Type, 1, DataLayout> result = tensor.cumsum(0, Exclusive);
23 
24  VERIFY_IS_EQUAL(tensor.dimension(0), result.dimension(0));
25 
26  float accum = 0;
27  for (int i = 0; i < size; i++) {
28  if (Exclusive) {
29  VERIFY_IS_EQUAL(result(i), accum);
30  accum += tensor(i);
31  } else {
32  accum += tensor(i);
33  VERIFY_IS_EQUAL(result(i), accum);
34  }
35  }
36 
37  accum = 1;
38  result = tensor.cumprod(0, Exclusive);
39  for (int i = 0; i < size; i++) {
40  if (Exclusive) {
41  VERIFY_IS_EQUAL(result(i), accum);
42  accum *= tensor(i);
43  } else {
44  accum *= tensor(i);
45  VERIFY_IS_EQUAL(result(i), accum);
46  }
47  }
48 }
int i
Definition: BiCGSTAB_step_by_step.cpp:9
Scalar Scalar int size
Definition: benchVecAdd.cpp:17
The tensor class.
Definition: Tensor.h:68
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Index dimension(std::size_t n) const
Definition: Tensor.h:99
#define VERIFY_IS_EQUAL(a, b)
Definition: main.h:367

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

◆ test_4d_scan()

template<int DataLayout, typename Type = float>
static void test_4d_scan ( )
static
51  {
52  int size = 5;
54  tensor.setRandom();
55 
57 
58  result = tensor.cumsum(0);
59  float accum = 0;
60  for (int i = 0; i < size; i++) {
61  accum += tensor(i, 1, 2, 3);
62  VERIFY_IS_EQUAL(result(i, 1, 2, 3), accum);
63  }
64  result = tensor.cumsum(1);
65  accum = 0;
66  for (int i = 0; i < size; i++) {
67  accum += tensor(1, i, 2, 3);
68  VERIFY_IS_EQUAL(result(1, i, 2, 3), accum);
69  }
70  result = tensor.cumsum(2);
71  accum = 0;
72  for (int i = 0; i < size; i++) {
73  accum += tensor(1, 2, i, 3);
74  VERIFY_IS_EQUAL(result(1, 2, i, 3), accum);
75  }
76  result = tensor.cumsum(3);
77  accum = 0;
78  for (int i = 0; i < size; i++) {
79  accum += tensor(1, 2, 3, i);
80  VERIFY_IS_EQUAL(result(1, 2, 3, i), accum);
81  }
82 }

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

◆ test_tensor_maps()

template<int DataLayout>
static void test_tensor_maps ( )
static
85  {
86  int inputs[20];
87  TensorMap<Tensor<int, 1, DataLayout> > tensor_map(inputs, 20);
88  tensor_map.setRandom();
89 
90  Tensor<int, 1, DataLayout> result = tensor_map.cumsum(0);
91 
92  int accum = 0;
93  for (int i = 0; i < 20; ++i) {
94  accum += tensor_map(i);
95  VERIFY_IS_EQUAL(result(i), accum);
96  }
97 }
A tensor expression mapping an existing array of data.
Definition: TensorMap.h:33

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