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

Functions

static void test_single_voxel_patch ()
 
static void test_entire_volume_patch ()
 
 EIGEN_DECLARE_TEST (cxx11_tensor_volume_patch)
 

Function Documentation

◆ EIGEN_DECLARE_TEST()

EIGEN_DECLARE_TEST ( cxx11_tensor_volume_patch  )
104  {
107 }
static void test_single_voxel_patch()
Definition: cxx11_tensor_volume_patch.cpp:7
static void test_entire_volume_patch()
Definition: cxx11_tensor_volume_patch.cpp:37
#define CALL_SUBTEST(FUNC)
Definition: main.h:382

References CALL_SUBTEST, test_entire_volume_patch(), and test_single_voxel_patch().

◆ test_entire_volume_patch()

static void test_entire_volume_patch ( )
static
37  {
38  const int depth = 4;
39  const int patch_z = 2;
40  const int patch_y = 3;
41  const int patch_x = 5;
42  const int batch = 7;
43 
44  Tensor<float, 5> tensor(depth, patch_z, patch_y, patch_x, batch);
45  tensor.setRandom();
46  Tensor<float, 5, RowMajor> tensor_row_major = tensor.swap_layout();
47 
48  Tensor<float, 6> entire_volume_patch;
49  entire_volume_patch = tensor.extract_volume_patches(patch_z, patch_y, patch_x);
50  VERIFY_IS_EQUAL(entire_volume_patch.dimension(0), depth);
51  VERIFY_IS_EQUAL(entire_volume_patch.dimension(1), patch_z);
52  VERIFY_IS_EQUAL(entire_volume_patch.dimension(2), patch_y);
53  VERIFY_IS_EQUAL(entire_volume_patch.dimension(3), patch_x);
54  VERIFY_IS_EQUAL(entire_volume_patch.dimension(4), patch_z * patch_y * patch_x);
55  VERIFY_IS_EQUAL(entire_volume_patch.dimension(5), batch);
56 
57  Tensor<float, 6, RowMajor> entire_volume_patch_row_major;
58  entire_volume_patch_row_major = tensor_row_major.extract_volume_patches(patch_z, patch_y, patch_x);
59  VERIFY_IS_EQUAL(entire_volume_patch_row_major.dimension(0), batch);
60  VERIFY_IS_EQUAL(entire_volume_patch_row_major.dimension(1), patch_z * patch_y * patch_x);
61  VERIFY_IS_EQUAL(entire_volume_patch_row_major.dimension(2), patch_x);
62  VERIFY_IS_EQUAL(entire_volume_patch_row_major.dimension(3), patch_y);
63  VERIFY_IS_EQUAL(entire_volume_patch_row_major.dimension(4), patch_z);
64  VERIFY_IS_EQUAL(entire_volume_patch_row_major.dimension(5), depth);
65 
66  const int dz = patch_z - 1;
67  const int dy = patch_y - 1;
68  const int dx = patch_x - 1;
69 
70  const int forward_pad_z = dz / 2;
71  const int forward_pad_y = dy / 2;
72  const int forward_pad_x = dx / 2;
73 
74  for (int pz = 0; pz < patch_z; pz++) {
75  for (int py = 0; py < patch_y; py++) {
76  for (int px = 0; px < patch_x; px++) {
77  const int patchId = pz + patch_z * (py + px * patch_y);
78  for (int z = 0; z < patch_z; z++) {
79  for (int y = 0; y < patch_y; y++) {
80  for (int x = 0; x < patch_x; x++) {
81  for (int b = 0; b < batch; b++) {
82  for (int d = 0; d < depth; d++) {
83  float expected = 0.0f;
84  float expected_row_major = 0.0f;
85  const int eff_z = z - forward_pad_z + pz;
86  const int eff_y = y - forward_pad_y + py;
87  const int eff_x = x - forward_pad_x + px;
88  if (eff_z >= 0 && eff_y >= 0 && eff_x >= 0 && eff_z < patch_z && eff_y < patch_y && eff_x < patch_x) {
89  expected = tensor(d, eff_z, eff_y, eff_x, b);
90  expected_row_major = tensor_row_major(b, eff_x, eff_y, eff_z, d);
91  }
92  VERIFY_IS_EQUAL(entire_volume_patch(d, z, y, x, patchId, b), expected);
93  VERIFY_IS_EQUAL(entire_volume_patch_row_major(b, patchId, x, y, z, d), expected_row_major);
94  }
95  }
96  }
97  }
98  }
99  }
100  }
101  }
102 }
Scalar * b
Definition: benchVecAdd.cpp:17
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const TensorLayoutSwapOp< const Derived > swap_layout() const
Definition: TensorBase.h:1084
The tensor class.
Definition: Tensor.h:68
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Index dimension(std::size_t n) const
Definition: Tensor.h:99
RealScalar RealScalar * px
Definition: level1_cplx_impl.h:27
Scalar * y
Definition: level1_cplx_impl.h:128
int RealScalar int RealScalar * py
Definition: level1_cplx_impl.h:124
#define VERIFY_IS_EQUAL(a, b)
Definition: main.h:367
list x
Definition: plotDoE.py:28

References b, Eigen::Tensor< Scalar_, NumIndices_, Options_, IndexType_ >::dimension(), px, py, Eigen::TensorBase< Derived, AccessLevel >::setRandom(), Eigen::TensorBase< Derived, AccessLevel >::swap_layout(), VERIFY_IS_EQUAL, plotDoE::x, and y.

Referenced by EIGEN_DECLARE_TEST().

◆ test_single_voxel_patch()

static void test_single_voxel_patch ( )
static
7  {
8  Tensor<float, 5> tensor(4, 2, 3, 5, 7);
9  tensor.setRandom();
10  Tensor<float, 5, RowMajor> tensor_row_major = tensor.swap_layout();
11 
12  Tensor<float, 6> single_voxel_patch;
13  single_voxel_patch = tensor.extract_volume_patches(1, 1, 1);
14  VERIFY_IS_EQUAL(single_voxel_patch.dimension(0), 4);
15  VERIFY_IS_EQUAL(single_voxel_patch.dimension(1), 1);
16  VERIFY_IS_EQUAL(single_voxel_patch.dimension(2), 1);
17  VERIFY_IS_EQUAL(single_voxel_patch.dimension(3), 1);
18  VERIFY_IS_EQUAL(single_voxel_patch.dimension(4), 2 * 3 * 5);
19  VERIFY_IS_EQUAL(single_voxel_patch.dimension(5), 7);
20 
21  Tensor<float, 6, RowMajor> single_voxel_patch_row_major;
22  single_voxel_patch_row_major = tensor_row_major.extract_volume_patches(1, 1, 1);
23  VERIFY_IS_EQUAL(single_voxel_patch_row_major.dimension(0), 7);
24  VERIFY_IS_EQUAL(single_voxel_patch_row_major.dimension(1), 2 * 3 * 5);
25  VERIFY_IS_EQUAL(single_voxel_patch_row_major.dimension(2), 1);
26  VERIFY_IS_EQUAL(single_voxel_patch_row_major.dimension(3), 1);
27  VERIFY_IS_EQUAL(single_voxel_patch_row_major.dimension(4), 1);
28  VERIFY_IS_EQUAL(single_voxel_patch_row_major.dimension(5), 4);
29 
30  for (int i = 0; i < tensor.size(); ++i) {
31  VERIFY_IS_EQUAL(tensor.data()[i], single_voxel_patch.data()[i]);
32  VERIFY_IS_EQUAL(tensor_row_major.data()[i], single_voxel_patch_row_major.data()[i]);
33  VERIFY_IS_EQUAL(tensor.data()[i], tensor_row_major.data()[i]);
34  }
35 }
int i
Definition: BiCGSTAB_step_by_step.cpp:9
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Scalar * data()
Definition: Tensor.h:102

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

Referenced by EIGEN_DECLARE_TEST().