Main MRPT website > C++ reference for MRPT 1.9.9
CSerializable_unittest.cpp
Go to the documentation of this file.
1 /* +------------------------------------------------------------------------+
2  | Mobile Robot Programming Toolkit (MRPT) |
3  | http://www.mrpt.org/ |
4  | |
5  | Copyright (c) 2005-2018, Individual contributors, see AUTHORS file |
6  | See: http://www.mrpt.org/Authors - All rights reserved. |
7  | Released under BSD License. See details in http://www.mrpt.org/License |
8  +------------------------------------------------------------------------+ */
9 
10 #define MRPT_NO_WARN_BIG_HDR // Yes, we really want to include all classes.
11 #include <mrpt/obs.h>
12 
13 #include <mrpt/io/CMemoryStream.h>
14 #include <gtest/gtest.h>
15 #include <CTraitsTest.h>
16 #include <sstream>
17 
18 using namespace mrpt;
19 using namespace mrpt::obs;
20 using namespace mrpt::io;
21 using namespace mrpt::math;
22 using namespace mrpt::serialization;
23 using namespace std;
24 
25 #define TEST_CLASS_MOVE_COPY_CTORS(_classname) \
26  template class mrpt::CTraitsTest<_classname>
27 
43 #if MRPT_HAS_OPENCV // These classes need CImage serialization
46 #endif
53 
55  // Observations:
64 #if MRPT_HAS_OPENCV // These classes need CImage serialization
66 #endif
69  // Actions:
71 
72 // Create a set of classes, then serialize and deserialize to test possible
73 // bugs:
74 TEST(Observations, WriteReadToMem)
75 {
76  for (size_t i = 0; i < sizeof(lstClasses) / sizeof(lstClasses[0]); i++)
77  {
78  try
79  {
80  CMemoryStream buf;
81  auto arch = mrpt::serialization::archiveFrom(buf);
82  {
83  CSerializable* o =
84  static_cast<CSerializable*>(lstClasses[i]->createObject());
85  arch << *o;
86  delete o;
87  }
88 
89  CSerializable::Ptr recons;
90  buf.Seek(0);
91  arch >> recons;
92  }
93  catch (std::exception& e)
94  {
95  GTEST_FAIL() << "Exception during serialization test for class '"
96  << lstClasses[i]->className << "':\n"
97  << e.what() << endl;
98  }
99  }
100 }
101 
102 // Also try to convert them to octect vectors:
103 TEST(Observations, WriteReadToOctectVectors)
104 {
105  for (size_t i = 0; i < sizeof(lstClasses) / sizeof(lstClasses[0]); i++)
106  {
107  try
108  {
109  std::vector<uint8_t> buf;
110  {
111  CSerializable* o =
112  static_cast<CSerializable*>(lstClasses[i]->createObject());
114  delete o;
115  }
116 
117  CSerializable::Ptr recons;
119  }
120  catch (std::exception& e)
121  {
122  GTEST_FAIL() << "Exception during serialization test for class '"
123  << lstClasses[i]->className << "':\n"
124  << e.what() << endl;
125  }
126  }
127 }
128 
129 // Try to invoke a copy ctor and = operator:
130 template <class T>
131 void run_copy_tests()
132 {
133  std::stringstream ss;
134  {
135  auto ptr_org = T::Create();
136  auto ptr_copy_op = T::Create();
137  *ptr_copy_op = *ptr_org; // copy op
138  ptr_org.reset();
139  // make sure the copy works without erroneous mem accesses,etc.
140  ptr_copy_op->getDescriptionAsText(ss);
141  }
142  {
143  auto ptr_org = T::Create();
144  auto ptr_copy_ctor = T::Create(*ptr_org); // copy ctor
145  ptr_org.reset();
146  // make sure the copy works without erroneous mem accesses,etc.
147  ptr_copy_ctor->getDescriptionAsText(ss);
148  }
149 }
150 
151 TEST(Observations, CopyCtorAssignOp)
152 {
153  run_copy_tests<CObservation2DRangeScan>();
154  run_copy_tests<CObservation3DRangeScan>();
155  run_copy_tests<CObservationGPS>();
156  run_copy_tests<CObservationIMU>();
157  run_copy_tests<CObservationOdometry>();
158 }
mrpt::io::CMemoryStream::Seek
uint64_t Seek(int64_t Offset, CStream::TSeekOrigin Origin=sFromBeginning) override
Introduces a pure virtual method for moving to a specified position in the streamed resource.
Definition: CMemoryStream.cpp:120
mrpt::obs::CObservationBatteryState
This represents a measurement of the batteries on the robot.
Definition: CObservationBatteryState.h:33
mrpt::obs::CObservationWirelessPower
This represents a measurement of the wireless strength perceived by the robot.
Definition: CObservationWirelessPower.h:29
mrpt::rtti::TRuntimeClassId
A structure that holds runtime class type information.
Definition: CObject.h:30
mrpt::obs::CObservationRawDAQ
Store raw data from a Data Acquisition (DAQ) device, such that input or output analog and digital cha...
Definition: CObservationRawDAQ.h:32
mrpt::io
Definition: img/CImage.h:22
mrpt::serialization::CSerializable::Ptr
std::shared_ptr< CSerializable > Ptr
Definition: CSerializable.h:37
mrpt::obs::CObservation2DRangeScan
A "CObservation"-derived class that represents a 2D range scan measurement (typically from a laser sc...
Definition: CObservation2DRangeScan.h:56
mrpt::obs::CObservationReflectivity
Declares a class derived from "CObservation" that encapsules a single short-range reflectivity measur...
Definition: CObservationReflectivity.h:27
mrpt::obs::CActionRobotMovement3D
Represents a probabilistic 3D (6D) movement.
Definition: CActionRobotMovement3D.h:29
CMemoryStream.h
mrpt::obs::CObservationComment
This "observation" is actually a placeholder for a text block with comments or additional parameters ...
Definition: CObservationComment.h:27
mrpt::rtti::TRuntimeClassId::className
const char * className
Definition: CObject.h:33
mrpt
This is the global namespace for all Mobile Robot Programming Toolkit (MRPT) libraries.
Definition: CKalmanFilterCapable.h:30
mrpt::obs::CActionRobotMovement2D
Represents a probabilistic 2D movement of the robot mobile base.
Definition: CActionRobotMovement2D.h:32
mrpt::obs::CObservationIMU
This class stores measurements from an Inertial Measurement Unit (IMU) (attitude estimation,...
Definition: CObservationIMU.h:108
mrpt::obs
This namespace contains representation of robot actions and observations.
Definition: CParticleFilter.h:17
mrpt::obs::CObservationOdometry
An observation of the current (cumulative) odometry for a wheeled robot.
Definition: CObservationOdometry.h:32
mrpt::obs::CObservationBeaconRanges
Declares a class derived from "CObservation" that represents one (or more) range measurements to labe...
Definition: CObservationBeaconRanges.h:27
mrpt::obs::CObservation3DRangeScan
Declares a class derived from "CObservation" that encapsules a 3D range scan measurement,...
Definition: CObservation3DRangeScan.h:224
mrpt::obs::CObservation6DFeatures
An observation of one or more "features" or "objects", possibly identified with a unique ID,...
Definition: CObservation6DFeatures.h:28
mrpt::serialization::CSerializable
The virtual base class which provides a unified interface for all persistent objects in MRPT.
Definition: CSerializable.h:32
mrpt::obs::CObservationBearingRange
This observation represents a number of range-bearing value pairs, each one for a detected landmark,...
Definition: CObservationBearingRange.h:31
mrpt::obs::CObservationCANBusJ1939
This class stores a message from a CAN BUS with the protocol J1939.
Definition: CObservationCANBusJ1939.h:24
mrpt::rtti::TRuntimeClassId::createObject
mrpt::rtti::CObject * createObject() const
Definition: CObject.cpp:79
mrpt::io::CMemoryStream
This CStream derived class allow using a memory buffer as a CStream.
Definition: io/CMemoryStream.h:26
obs.h
mrpt::serialization
Definition: aligned_serialization.h:14
mrpt::obs::CObservationRange
Declares a class derived from "CObservation" that encapsules a single range measurement,...
Definition: CObservationRange.h:30
mrpt::serialization::OctetVectorToObject
void OctetVectorToObject(const std::vector< uint8_t > &in_data, CSerializable::Ptr &obj)
Converts back (de-serializes) a sequence of binary data into a MRPT object, without prior information...
Definition: CSerializable.cpp:29
mrpt::obs::CObservationGasSensors
Declares a class derived from "CObservation" that represents a set of readings from gas sensors.
Definition: CObservationGasSensors.h:27
mrpt::serialization::archiveFrom
CArchiveStreamBase< STREAM > archiveFrom(STREAM &s)
Helper function to create a templatized wrapper CArchive object for a: MRPT's CStream,...
Definition: CArchive.h:561
CLASS_ID
#define CLASS_ID(T)
Access to runtime class ID for a defined class name.
Definition: CObject.h:85
mrpt::obs::CObservationGPS
This class stores messages from GNSS or GNSS+IMU devices, from consumer-grade inexpensive GPS receive...
Definition: CObservationGPS.h:70
TEST
TEST(SocketTests, send_receive_object)
Definition: sockets_unittest.cpp:16
mrpt::obs::CObservationRFID
This represents one or more RFID tags observed by a receiver.
Definition: CObservationRFID.h:27
mrpt::obs::CObservationRGBD360
Declares a class derived from "CObservation" that encapsules an omnidirectional RGBD measurement from...
Definition: CObservationRGBD360.h:84
lstClasses
const mrpt::rtti::TRuntimeClassId * lstClasses[]
Definition: CLogFileRecord_unittest.cpp:28
mrpt::math
This base provides a set of functions for maths stuff.
Definition: math/include/mrpt/math/bits_math.h:13
mrpt::serialization::ObjectToOctetVector
void ObjectToOctetVector(const CSerializable *o, std::vector< uint8_t > &out_vector)
Converts (serializes) an MRPT object into an array of bytes.
Definition: CSerializable.cpp:21
run_copy_tests
void run_copy_tests()
Definition: serialization/src/CSerializable_unittest.cpp:131
mrpt::obs::CObservationImage
Declares a class derived from "CObservation" that encapsules an image from a camera,...
Definition: CObservationImage.h:35
mrpt::obs::CObservationStereoImages
Observation class for either a pair of left+right or left+disparity images from a stereo camera.
Definition: CObservationStereoImages.h:41
TEST_CLASS_MOVE_COPY_CTORS
#define TEST_CLASS_MOVE_COPY_CTORS(_classname)
Definition: maps/src/maps/serializations_unittest.cpp:25
mrpt::obs::CObservationVelodyneScan
A CObservation-derived class for RAW DATA (and optionally, point cloud) of scans from 3D Velodyne LID...
Definition: CObservationVelodyneScan.h:75



Page generated by Doxygen 1.8.17 for MRPT 1.9.9 Git: ad3a9d8ae Tue May 1 23:10:22 2018 -0700 at miƩ 12 jul 2023 10:03:34 CEST