serializer.cpp File Reference
#include "main.h"
#include <Eigen/Core>
#include <Eigen/SparseCore>
#include <vector>

Classes

struct  RandomImpl< T >
 
struct  RandomImpl< Eigen::SparseMatrix< Scalar, Options, DenseIndex > >
 
struct  RandomImpl< Eigen::SparseVector< Scalar, Options, DenseIndex > >
 
struct  MyPodType
 

Functions

void test_pod_type ()
 
template<typename T >
void test_eigen_type (const T &type)
 
template<typename T1 , typename T2 , typename T3 >
void test_dense_types (const T1 &type1, const T2 &type2, const T3 &type3)
 
 EIGEN_DECLARE_TEST (serializer)
 

Function Documentation

◆ EIGEN_DECLARE_TEST()

EIGEN_DECLARE_TEST ( serializer  )
213  {
215 
216  for (int i = 0; i < g_repeat; i++) {
217  CALL_SUBTEST(test_eigen_type(Eigen::Array33f()));
218  CALL_SUBTEST(test_eigen_type(Eigen::ArrayXd(10)));
219  CALL_SUBTEST(test_eigen_type(Eigen::Vector3f()));
220  CALL_SUBTEST(test_eigen_type(Eigen::Matrix4d()));
221  CALL_SUBTEST(test_eigen_type(Eigen::MatrixXd(15, 17)));
224 
225  CALL_SUBTEST(test_dense_types(Eigen::Array33f(), Eigen::ArrayXd(10), Eigen::MatrixXd(15, 17)));
226  }
227 }
int i
Definition: BiCGSTAB_step_by_step.cpp:9
A versatible sparse matrix representation.
Definition: SparseMatrix.h:121
a sparse vector class
Definition: SparseVector.h:62
#define CALL_SUBTEST(FUNC)
Definition: main.h:382
static int g_repeat
Definition: main.h:191
void test_dense_types(const T1 &type1, const T2 &type2, const T3 &type3)
Definition: serializer.cpp:170
void test_eigen_type(const T &type)
Definition: serializer.cpp:128
void test_pod_type()
Definition: serializer.cpp:83

References CALL_SUBTEST, Eigen::g_repeat, i, test_dense_types(), test_eigen_type(), and test_pod_type().

◆ test_dense_types()

template<typename T1 , typename T2 , typename T3 >
void test_dense_types ( const T1 &  type1,
const T2 &  type2,
const T3 &  type3 
)
170  {
171  // Make random inputs.
172  const T1 x1 = T1::Random(type1.rows(), type1.cols());
173  const T2 x2 = T2::Random(type2.rows(), type2.cols());
174  const T3 x3 = T3::Random(type3.rows(), type3.cols());
175 
176  // Allocate buffer and serialize.
177  size_t buffer_size = Eigen::serialize_size(x1, x2, x3);
178  std::vector<uint8_t> buffer(buffer_size);
179  uint8_t* begin = buffer.data();
180  uint8_t* end = buffer.data() + buffer.size();
181  uint8_t* dest = Eigen::serialize(begin, end, x1, x2, x3);
182  VERIFY(dest != nullptr);
183 
184  // Clone everything.
185  T1 y1;
186  T2 y2;
187  T3 y3;
188  const uint8_t* src = Eigen::deserialize(begin, end, y1, y2, y3);
189  VERIFY(src != nullptr);
190 
191  // Verify they equal.
194  VERIFY_IS_CWISE_EQUAL(y3, x3);
195 
196  // Serialize everything with bounds checking errors.
197  dest = Eigen::serialize(begin, end - 1, y1, y2, y3);
198  VERIFY(dest == nullptr);
199  dest = Eigen::serialize(begin, begin, y1, y2, y3);
200  VERIFY(dest == nullptr);
201  dest = Eigen::serialize(nullptr, nullptr, y1, y2, y3);
202  VERIFY(dest == nullptr);
203 
204  // Deserialize everything with bounds checking errors.
205  src = Eigen::deserialize(begin, end - 1, y1, y2, y3);
206  VERIFY(src == nullptr);
207  src = Eigen::deserialize(begin, begin, y1, y2, y3);
208  VERIFY(src == nullptr);
209  src = Eigen::deserialize(nullptr, nullptr, y1, y2, y3);
210  VERIFY(src == nullptr);
211 }
static constexpr lastp1_t end
Definition: IndexedViewHelper.h:79
#define VERIFY_IS_CWISE_EQUAL(a, b)
Definition: main.h:375
#define VERIFY(a)
Definition: main.h:362
std::uint8_t uint8_t
Definition: Meta.h:36
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const uint8_t * deserialize(const uint8_t *src, const uint8_t *end, Args &... args)
Definition: Serializer.h:201
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE size_t serialize_size(const Args &... args)
Definition: Serializer.h:175
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE uint8_t * serialize(uint8_t *dest, uint8_t *end, const Args &... args)
Definition: Serializer.h:188
Vector< double > x1(const Vector< double > &coord)
Cartesian coordinates centered at the point (0.5,1)
Definition: poisson/poisson_with_singularity/two_d_poisson.cc:86
Vector< double > x2(const Vector< double > &coord)
Cartesian coordinates centered at the point (1.5,1)
Definition: poisson/poisson_with_singularity/two_d_poisson.cc:102

References Eigen::deserialize(), Eigen::placeholders::end, Eigen::serialize(), Eigen::serialize_size(), VERIFY, VERIFY_IS_CWISE_EQUAL, Global_parameters::x1(), and Global_parameters::x2().

Referenced by EIGEN_DECLARE_TEST().

◆ test_eigen_type()

template<typename T >
void test_eigen_type ( const T type)
128  {
129  const Index rows = type.rows();
130  const Index cols = type.cols();
131 
132  const T initial = RandomImpl<T>::Create(rows, cols);
133 
134  // Serialize.
135  Eigen::Serializer<T> serializer;
136  size_t buffer_size = serializer.size(initial);
137  std::vector<uint8_t> buffer(buffer_size);
138  uint8_t* begin = buffer.data();
139  uint8_t* end = buffer.data() + buffer.size();
140  uint8_t* dest = serializer.serialize(begin, end, initial);
141  VERIFY(dest != nullptr);
142  VERIFY_IS_EQUAL(dest - begin, buffer_size);
143 
144  // Deserialize.
145  T clone;
146  const uint8_t* src = serializer.deserialize(begin, end, clone);
147  VERIFY(src != nullptr);
148  VERIFY_IS_EQUAL(src - begin, buffer_size);
149  VERIFY_IS_CWISE_EQUAL(clone, initial);
150 
151  // Serialize with bounds checking errors.
152  dest = serializer.serialize(begin, end - 1, initial);
153  VERIFY(dest == nullptr);
154  dest = serializer.serialize(begin, begin, initial);
155  VERIFY(dest == nullptr);
156  dest = serializer.serialize(nullptr, nullptr, initial);
157  VERIFY(dest == nullptr);
158 
159  // Deserialize with bounds checking errors.
160  src = serializer.deserialize(begin, end - 1, clone);
161  VERIFY(src == nullptr);
162  src = serializer.deserialize(begin, begin, clone);
163  VERIFY(src == nullptr);
164  src = serializer.deserialize(nullptr, nullptr, clone);
165  VERIFY(src == nullptr);
166 }
int rows
Definition: Tutorial_commainit_02.cpp:1
int cols
Definition: Tutorial_commainit_02.cpp:1
Definition: Serializer.h:27
#define VERIFY_IS_EQUAL(a, b)
Definition: main.h:367
EIGEN_DEFAULT_DENSE_INDEX_TYPE Index
The Index type as used for the API.
Definition: Meta.h:83
type
Definition: compute_granudrum_aor.py:141
static auto Create(Eigen::Index rows, Eigen::Index cols)
Definition: serializer.cpp:18

References cols, RandomImpl< T >::Create(), Eigen::placeholders::end, rows, compute_granudrum_aor::type, VERIFY, VERIFY_IS_CWISE_EQUAL, and VERIFY_IS_EQUAL.

Referenced by EIGEN_DECLARE_TEST().

◆ test_pod_type()

void test_pod_type ( )
83  {
84  MyPodType initial = {1.3, 17, 1.9f};
85  MyPodType clone = {-1, -1, -1};
86 
88 
89  // Determine required size.
90  size_t buffer_size = serializer.size(initial);
91  VERIFY_IS_EQUAL(buffer_size, sizeof(MyPodType));
92 
93  // Serialize.
94  std::vector<uint8_t> buffer(buffer_size);
95  uint8_t* begin = buffer.data();
96  uint8_t* end = buffer.data() + buffer.size();
97  uint8_t* dest = serializer.serialize(begin, end, initial);
98  VERIFY(dest != nullptr);
99  VERIFY_IS_EQUAL(dest - begin, buffer_size);
100 
101  // Deserialize.
102  const uint8_t* src = serializer.deserialize(begin, end, clone);
103  VERIFY(src != nullptr);
104  VERIFY_IS_EQUAL(src - begin, buffer_size);
105  VERIFY_IS_EQUAL(clone.x, initial.x);
106  VERIFY_IS_EQUAL(clone.y, initial.y);
107  VERIFY_IS_EQUAL(clone.z, initial.z);
108 
109  // Serialize with bounds checking errors.
110  dest = serializer.serialize(begin, end - 1, initial);
111  VERIFY(dest == nullptr);
112  dest = serializer.serialize(begin, begin, initial);
113  VERIFY(dest == nullptr);
114  dest = serializer.serialize(nullptr, nullptr, initial);
115  VERIFY(dest == nullptr);
116 
117  // Deserialize with bounds checking errors.
118  src = serializer.deserialize(begin, end - 1, clone);
119  VERIFY(src == nullptr);
120  src = serializer.deserialize(begin, begin, clone);
121  VERIFY(src == nullptr);
122  src = serializer.deserialize(nullptr, nullptr, clone);
123  VERIFY(src == nullptr);
124 }
Definition: serializer.cpp:76
float z
Definition: serializer.cpp:79
double x
Definition: serializer.cpp:77
int y
Definition: serializer.cpp:78

References Eigen::placeholders::end, VERIFY, VERIFY_IS_EQUAL, MyPodType::x, MyPodType::y, and MyPodType::z.

Referenced by EIGEN_DECLARE_TEST().