Global Namespace

Overview

// namespaces

namespace Bonxai;
    namespace Bonxai::details;
namespace CLI;
namespace STB_RESTORE_WARNINGS;
namespace bayes;
namespace chrono_literals;
namespace detail;
namespace internal;
namespace mrpt;
    namespace mrpt::apps;
    namespace mrpt::bayes;
        namespace mrpt::bayes::detail;
        namespace mrpt::bayes::kf_detail;
    namespace mrpt::comms;
        namespace mrpt::comms::net;
    namespace mrpt::config;
        namespace mrpt::config::internal;
    namespace mrpt::containers;
        namespace mrpt::containers::internal;
    namespace mrpt::cpu;
        namespace mrpt::cpu::internal;
    namespace mrpt::detail;
    namespace mrpt::expr;
    namespace mrpt::global_settings;
    namespace mrpt::graphs;
        namespace mrpt::graphs::detail;
    namespace mrpt::graphslam;
        namespace mrpt::graphslam::apps;
        namespace mrpt::graphslam::deciders;
        namespace mrpt::graphslam::detail;
        namespace mrpt::graphslam::optimizers;
    namespace mrpt::gtsam_wrappers;
    namespace mrpt::gui;
        namespace mrpt::gui::WxSubsystem;
        namespace mrpt::gui::detail;
    namespace mrpt::hwdrivers;
    namespace mrpt::img;
        namespace mrpt::img::camera_geometry;
            namespace mrpt::img::camera_geometry::distortion;
        namespace mrpt::img::detail;
    namespace mrpt::imgui;
    namespace mrpt::internal;
    namespace mrpt::io;
        namespace mrpt::io::internal;
        namespace mrpt::io::zip;
    namespace mrpt::kinematics;
    namespace mrpt::maps;
        namespace mrpt::maps::detail;
        namespace mrpt::maps::internal;
        namespace mrpt::maps::mrpt;
            namespace mrpt::maps::mrpt::maps;
                namespace mrpt::maps::mrpt::maps::COctoMapBase;
    namespace mrpt::math;
        namespace mrpt::math::detail;
        namespace mrpt::math::internal;
    namespace mrpt::nav;
    namespace mrpt::obs;
        namespace mrpt::obs::detail;
        namespace mrpt::obs::gnss;
            namespace mrpt::obs::gnss::nv_oem6_ins_status_type;
            namespace mrpt::obs::gnss::nv_oem6_position_type;
            namespace mrpt::obs::gnss::nv_oem6_solution_status;
        namespace mrpt::obs::stock_observations;
        namespace mrpt::obs::utils;
    namespace mrpt::opengl;
        namespace mrpt::opengl::internal;
    namespace mrpt::poses;
        namespace mrpt::poses::Lie;
        namespace mrpt::poses::detail;
        namespace mrpt::poses::internal;
    namespace mrpt::random;
    namespace mrpt::rtti;
        namespace mrpt::rtti::internal;
    namespace mrpt::serialization;
        namespace mrpt::serialization::detail;
        namespace mrpt::serialization::internal;
        namespace mrpt::serialization::metaprogramming;
    namespace mrpt::slam;
        namespace mrpt::slam::detail;
    namespace mrpt::system;
        namespace mrpt::system::os;
    namespace mrpt::tfest;
        namespace mrpt::tfest::internal;
    namespace mrpt::topography;
    namespace mrpt::typemeta;
        namespace mrpt::typemeta::detail;
        namespace mrpt::typemeta::internal;
    namespace mrpt::viz;
        namespace mrpt::viz::graph_tools;
        namespace mrpt::viz::stock_objects;
namespace nanoflann;
namespace nanogui;
namespace octomap;
namespace std;
namespace string_literals;
namespace test_data;
namespace testing;

// typedefs

typedef int cb_t;
typedef std::size_t data_t;
typedef mrpt::containers::vector_with_small_size_optimization<data_t, SMALL_LEN> vwsso_t;
typedef std::set<std::tuple<std::string, std::string>> in_out_filenames;
typedef GraphTester<CNetworkOfPoses2D> GraphTester2D;
typedef GraphTester<CNetworkOfPoses3D> GraphTester3D;
typedef GraphTester<CNetworkOfPoses2DInf> GraphTester2DInf;
typedef GraphTester<CNetworkOfPoses3DInf> GraphTester3DInf;
typedef WxSubsystem::OpCode OpCode;
typedef unsigned char stbi_uc;
typedef unsigned short stbi_us;
typedef uint8_t stbir_uint8;
typedef uint16_t stbir_uint16;
typedef uint32_t stbir_uint32;
typedef uint64_t stbir_uint64;

typedef void const* stbir_input_callback(
    void *optional_output,
    void const *input_ptr,
    int num_pixels,
    int x,
    int y,
    void *context
    );

typedef void stbir_output_callback(
    void const *output_ptr,
    int num_pixels,
    int y,
    void *context
    );

typedef float stbir__kernel_callback(
    float x,
    float scale,
    void *user_data
    );

typedef float stbir__support_callback(
    float scale,
    void *user_data
    );

typedef struct stbir__info stbir__info;
typedef struct STBIR_RESIZE STBIR_RESIZE;

typedef void stbi_write_func(
    void *context,
    void *data,
    int size
    );

typedef void(*)(mrpt::io::CCompressedInputStream&in_rawlog, CLI::App&cmdline, bool verbose) TOperationFunctor;
typedef std::function<void(mrpt::config::CConfigFileBase&)> config_changer_t;
typedef std::function<void(mrpt::apps::ICP_SLAM_App_Base&)> post_tester_t;
typedef std::function<void(mrpt::config::CConfigFileBase&)> config_changer_t;
typedef std::function<void(mrpt::config::CConfigFileBase&)> config_changer_t;
typedef std::function<void(mrpt::apps::MonteCarloLocalization_Base&)> post_tester_t;
typedef mrpt::apps::MonteCarloLocalization_Rawlog MCL;
typedef std::function<void(mrpt::config::CConfigFileBase&)> config_changer_t;
typedef std::function<void(mrpt::apps::RBPF_SLAM_App_Base&)> post_tester_t;
typedef Eigen::Matrix<double, Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor> EigenRowMatrixXd;
typedef Eigen::Matrix<double, 1, Eigen::Dynamic, Eigen::RowMajor> EigenRowVectorXd;
typedef int32_t cell_t;
typedef mrpt::system::CGenericMemoryPool<CObservation3DRangeScan_Points_MemPoolParams, CObservation3DRangeScan_Points_MemPoolData> TMyPointsMemPool;
typedef mrpt::system::CGenericMemoryPool<CObservation3DRangeScan_Ranges_MemPoolParams, CObservation3DRangeScan_Ranges_MemPoolData> TMyRangesMemPool;
typedef CObservationRotatingScan RotScan;
typedef mrpt::obs::CObservationVelodyneScan Velo;
typedef TPixelLabelInfoBase plib;
typedef mrpt::system::CGenericMemoryPool<CRenderizableShaderTexturedTriangles_MemPoolParams, CRenderizableShaderTexturedTriangles_MemPoolData> TMyMemPool;
typedef SE_traits_tests<mrpt::poses::CPose3D> SE3_traits_tests;
typedef SE_traits_tests<mrpt::poses::CPose2D> SE2_traits_tests;
typedef std::vector<std::vector<double>> TPoints;
typedef double precnum_t;

// enums

enum
{
    STBI_default    = 0,
    STBI_grey       = 1,
    STBI_grey_alpha = 2,
    STBI_rgb        = 3,
    STBI_rgb_alpha  = 4,
};

enum Directions;
enum JohnsonBodyPart;
enum PLY_DATA_TYPE;
enum TestColors;
enum stbir_datatype;
enum stbir_edge;
enum stbir_filter;
enum stbir_pixel_layout;

// structs

struct Bar1;
struct Bar2;
struct CObservation3DRangeScan_Points_MemPoolData;
struct CObservation3DRangeScan_Points_MemPoolParams;
struct CObservation3DRangeScan_Ranges_MemPoolData;
struct CObservation3DRangeScan_Ranges_MemPoolParams;
struct CRenderizableShaderTexturedTriangles_MemPoolData;
struct CRenderizableShaderTexturedTriangles_MemPoolParams;
struct FontData;

template <unsigned int INTER_SPACE>
struct Foo;

struct GaussianRS;
struct LUT_info;
struct MapAuxPFCleanup;
struct MapCanComputeLikelihood;
struct MapExecutor;
struct MapIsEmpty;
struct MatchingVertex;
struct MinimalRobotIF;
struct MinimalWaypointsNav;
struct MyFooClass;
struct MyGlobalProfiler;
struct PlyElement;
struct PlyFile;
struct PlyProperty;
struct STBIR_RESIZE;
struct SegmentVector;
struct SimpleParticlePDF;
struct T2ListsOfSegments;
struct TAuxLoadFunctor;
struct TAuxRangeMeasInfo;
struct TCommonRegion;
struct TDataPerGPS;
struct TDataPerGPSGAS;
struct TFace;
struct TFunctorLaserSimulData;
struct TGPSDataPoint;
struct TGPSGASDataPoint;
struct TGap;
struct TInfoPerSensorLabel;
struct TInterpQuery;
struct TLocalPoint;
struct TObs;
struct TOldCellTypeInVersion1;
struct TOutputRawlogCreator;
struct TParsersRegistry;
struct TSegmentWithLine;
struct TTempIntersection;
struct TVertex;

template <>
struct kfslam_traits<CRangeBearingKFSLAM>;

template <class IMPL>
struct kfslam_traits;

template <>
struct kfslam_traits<CRangeBearingKFSLAM2D>;

template <class PDF>
struct pf2gauss_t;

template <>
struct pf2gauss_t<mrpt::slam::CMonteCarloLocalization2D>;

template <>
struct pf2gauss_t<CMonteCarloLocalization3D>;

struct stbi_io_callbacks;

// classes

class CAboutBox;
class CAboutBoxBase;
class CAboutBoxQt;
class CCompressedStreamsTest;
class CDialogAskUserForCamera;
class CDisplayWindow_WXAPP;

template <class GRAPH_T = mrpt::graphs::CNetworkOfPoses2DInf>
class CGraphSlamHandler;

class CMyRedirector;
class FCreatePolygon;

template <class T>
class FCreatePolygonFromFace;

class FUnprojectPolygon2D;

template <class my_graph_t>
class GraphSlamLevMarqTest;

template <class my_graph_t>
class GraphTester;

class HolonomicFullEvalTest;
class HolonomicNDTest;
class HolonomicVFFTest;
class ICPTests;
class LikelihoodMethodTest;
class MD5;
class Pose3DPDFGaussTests;
class Pose3DQuatPDFGaussTests;
class Pose3DQuatTests;
class Pose3DTests;
class PosePDFGaussTests;
class QuaternionTests;
class RawlogEditCLITest;

template <class POSE_TYPE>
class SE_traits_tests;

class TextureResourceHandler;
class WxSubSystemGlobalData;

// global variables

static int MRPT_SAVE_NAME_PADDING = 50;
static int MRPT_SAVE_VALUE_PADDING = 20;
const int LOADABLEOPTS_COLUMN_WIDTH = 41;
const std::string sampleCfgTxt =     "[test]\n"     "key_str = this is a \\\n"     "long value that can be \\\n"     "split into several lines \\\n"     "but read as a single line. \n";
const std::string expectedStr = std::string("this is a long value that can be split into several lines but read as a "     "single line.");
constexpr size_t SMALL_LEN = 16;
int counter = 0;
const mrpt::containers::yaml testMap = mrpt::containers::yaml::Map({     {         "K",                                                                                      2.0},     {      "book",                                                                           "silmarillion"},     {"mySequence", mrpt::containers::yaml::Sequence({1.0, 2.0, mrpt::containers::yaml::Map({{"P", 1.0}, {"Q", 2.0}})})                      },     {"myEmptyVal",                                                                                       {}},     {    "myDict",                        mrpt::containers::yaml::Map({{"A", 1.0}, {"B", 2.0}, {"C", 3.0}})} });
const std::map<std::string, in_out_filenames> inout_graph_files {     {   "GraphTester2D",      {{"graphslam_SE2_in.graph", "graphslam_SE2_out_good.graph"},      {"graphslam_SE2_in2.graph", "graphslam_SE2_out_good2.graph"},      {"graphslam_SE2_in3.graph", "graphslam_SE2_out_good3.graph"}}    },     {"GraphTester2DInf",      {{"graphslam_SE2_in.graph", "graphslam_SE2_out_good.graph"},      {"graphslam_SE2pdf_in.graph", "graphslam_SE2pdf_out_good.graph"}}},     {   "GraphTester3D",      {{"graphslam_SE3_in_torus3D-first100.graph", "graphslam_SE3_out_good_torus3D-first100.graph"},      {"graphslam_SE2_in2.graph", "graphslam_SE2_out_good2.graph"}}    } };
const wxWindowID ID_MENUITEM1 = wxNewId();
const wxWindowID ID_MENUITEM2 = wxNewId();
const wxWindowID ID_MENUITEM3 = wxNewId();
const wxWindowID ID_MENUITEM1 = wxNewId();
const wxWindowID ID_MENUITEM2 = wxNewId();
const int INVALID_CLICK_COORDS = -99999;
const auto ID_TIMER_WX_PROCESS_REQUESTS = wxNewId();
const size_t MAX_NMEA_LINE_LENGTH = 1024;
const int MINIMUM_PACKETS_TO_SET_TIMESTAMP_REFERENCE = 10;
const unsigned char SearchForAF = 0;
const unsigned char SearchForFE = 1;
const unsigned char SearchForC0 = 2;
const unsigned char SearchForC2 = 3;
const unsigned char PacketFound = 4;
const unsigned char SaveData = 5;
std::vector<std::shared_ptr<COpenNI2Generic::CDevice>> vDevices;
std::recursive_mutex vDevices_mx;
map<string, FontData> list_registered_fonts;
bool list_fonts_init = false;
static constexpr static auto s80 = static_cast<signed char>(0x80);
static constexpr static auto s96 = static_cast<signed char>(0x96);
static constexpr static auto sff = static_cast<signed char>(0xff);
static const unsigned char mrpt_font_gz_10x20[];
static const unsigned char mrpt_font_gz_18x18ja[];
static const unsigned char mrpt_font_gz_5x7[];
static const unsigned char mrpt_font_gz_6x13[];
static const unsigned char mrpt_font_gz_6x13B[];
static const unsigned char mrpt_font_gz_6x13O[];
static const unsigned char mrpt_font_gz_9x15[];
static const unsigned char mrpt_font_gz_9x15B[];
STBIWDEF int stbi_write_tga_with_rle;
STBIWDEF int stbi_write_png_compression_level;
STBIWDEF int stbi_write_force_png_filter;
const auto tstImgFileColor =     mrpt::UNITTEST_BASEDIR() + "/../../mrpt_examples_cpp/img_basic_example/frame_color.jpg"s;
const double fx = 800.0;
const double fy = 800.0;
const double cx = 320.0;
const double cy = 240.0;
const double k1 = -0.28340811;
const double k2 = 0.07395907;
const double p1 = 0.00019359;
const double p2 = 0.00019359;
const double k3 = 0.0;
static constexpr uint8_t GZIP_MAGIC1 = 0x1f;
static constexpr uint8_t GZIP_MAGIC2 = 0x8b;
static constexpr uint32_t ZSTD_MAGIC = 0xFD2FB528;
const float R = 0.01f;
CLI::App cmd {"rawlog-edit"};
std::string val_input_file;
std::string val_output_file;
std::string val_plugins;
std::string val_outdir = ".";
std::string val_image_format = "png";
std::string val_externals_filename_fmt = "${type}_${label}_%.06f";
bool val_txt_externals = false;
std::string val_img_size;
bool val_rectify_centers = false;
std::string val_out_text_file = "out.txt";
uint64_t val_from_index = 0;
uint64_t val_to_index = 0;
double val_from_time = 0;
double val_to_time = 0;
double val_odo_KL = 0;
double val_odo_KR = 0;
double val_odo_D = 0;
bool val_overwrite = false;
std::string val_select_label;
bool val_quiet = false;
std::string val_op_remap_timestamps;
std::string val_op_remove_label;
std::string val_op_keep_label;
std::string val_op_sensors_pose;
std::string val_op_camera_params;
const std::string ini_fil =       mrpt::mrpt_data_dir() + "/config_files/rawlog-grabber/camera_ffmpeg_video_file.ini"s;
const std::string video_fil = mrpt::mrpt_data_dir() + "/datasets/dummy_video.avi"s;
 try {     mrpt::apps::RawlogGrabberApp app;
const char* argv[] = {"rawlog-grabber", ini_fil.c_str()};
const int argc = sizeof(argv) / sizeof(argv[0]);
const auto out_dir = mrpt::system::getTempFileName() + "_dir"s;
constexpr auto sect = "MappingApplication";
constexpr auto sect = "MappingApplication";
static auto tester_for_2006_01_21 = [](mrpt::apps::ICP_SLAM_App_Base& o) {   EXPECT_EQ(o.out_estimated_path.size(), 224U);   const auto p = mrpt::poses::CPose3D(o.out_estimated_path.rbegin()->second);   const auto p_gt =       mrpt::poses::CPose3D::FromString("[3.4548 -18.0399 0.000000 -86.48 0.000000 0.000000]");    EXPECT_LT(mrpt::poses::Lie::SE<3>::log(p - p_gt).norm(), 1.0)<<"actual pose  ="<<p.asString()<<"\nexpected pose="<<p_gt.asString(); };
static bool tester_result_ok = true;
static auto tester_for_localization_demo = [](mrpt::apps::MonteCarloLocalization_Base& o) {   EXPECT_EQ(o.out_estimated_path.size(), 37U);   if(o.out_estimated_path.empty())   {     return;   }   const mrpt::math::TPose3D p = o.out_estimated_path.rbegin()->second;   const auto p_gt = mrpt::math::TPose3D::FromString("[15.89 -10.0 0.000000 4.8 0.000000 0.000000]");    const auto p_err = mrpt::poses::CPose3D(p_gt - p);   const double err = mrpt::poses::Lie::SE<3>::log(p_err).norm();    if(err<0.5)   {     tester_result_ok = true;   }   else   {     tester_result_ok = false;     std::cerr<<"Final pose mismatch(will retry N times):\n"                  "Expected: "<<p_gt.asString()<<"\n"                  "Actual  : "<<p.asString()<<"\n";   } };
static auto tester_for_2006_01_21 = [](mrpt::apps::RBPF_SLAM_App_Base& o) {   EXPECT_EQ(o.out_estimated_path.size(), 224U);   const auto p = mrpt::poses::CPose3D(o.out_estimated_path.rbegin()->second);   const auto p_gt =       mrpt::poses::CPose3D::FromString("[3.4548 -18.0399 0.000000 -86.48 0.000000 0.000000]");    EXPECT_LT(mrpt::poses::Lie::SE<3>::log(p - p_gt).norm(), 1.0)<<"actual pose  ="<<p.asString()<<"\nexpected pose="<<p_gt.asString(); };
static auto tester_for_ROSLAM_demo = [](mrpt::apps::RBPF_SLAM_App_Base& o) {   EXPECT_EQ(o.out_estimated_path.size(), 99U);   const auto p = mrpt::poses::CPose3D(o.out_estimated_path.rbegin()->second);   const auto p_gt =       mrpt::poses::CPose3D::FromString("[2.009005 3.330509 0.000000 115.004460 0.000000 0.000000]");    EXPECT_LT(mrpt::poses::Lie::SE<3>::log(p - p_gt).norm(), 1.0)<<"actual pose  ="<<p.asString()<<"\nexpected pose="<<p_gt.asString();    const auto& maps = o.mapBuilder->getCurrentlyBuiltMetricMap().maps;   ASSERT_EQUAL_(maps.size(), 1U);   auto beaconMap = std::dynamic_pointer_cast<mrpt::maps::CBeaconMap>(maps.at(0));   ASSERT_(beaconMap);              EXPECT_EQ(beaconMap->size(), 14UL); };
bool HEIGHTGRIDMAP_EXPORT3D_AS_MESH_value = true;
static const float MAX_H = 0.69314718055994531f;
static CLogOddsGridMapLUT<COccupancyGridMap2D::cellType> logodd_lut;
static CLogOddsGridMapLUT<COccupancyGridMap3D::voxelType> logodd_lut;
static constexpr unsigned FRBITS = 9;
static TAuxLoadFunctor dummy_loader;
const double xMin = -4.0;
const double xMax = 4.0;
const double yMin = -4.0;
const double yMax = 4.0;
const double val = 0.2;
const double sigma = 1.0;
const bool ti = true;
const bool um = false;
constexpr unsigned int TEST_RANGEIMG_WIDTH = 32;
constexpr unsigned int TEST_RANGEIMG_HEIGHT = 24;
constexpr float SECOND_LAYER_CONSTANT_RANGE = 50.0f;
static double geometryEpsilon = 1e-5;
const double eps = 1e-14;
const double eps = 1e-12;
constexpr std::size_t MATRIX33_ALIGN_BYTES = alignof(mrpt::math::CMatrixFixed<double, 3, 3>);
const double dat_A[] = {4, 5, 8, -2, 1, 3};
const double dat_B[] = {2, 6, 9, 8};
const double dat_Cok[] = {53, 64, -2, 32, 29, 30};
static double test_nums[3 *4] = {1, 2, 3, 4,  5,  6,                                                                        7, 8, 9, 10, 11, 12};
const double eps = 1e-9;
const double list_test_kernel_none[][5] = {     { 0.0, .0,  0.0, 1.0, 0.0},     { 1.0, .0,  1.0, 1.0, 0.0},     {10.0, .0, 10.0, 1.0, 0.0} };
const double list_test_kernel_pshb[][5] = {     {0.0, 1.0,      0.0,      1.0,       -0.5},     {0.0, 4.0,      0.0,      1.0,     -0.125},     {0.0, 9.0,      0.0,      1.0, -0.0555556},     {1.0, 1.0, 0.828427, 0.707107,  -0.176777},     {1.0, 4.0, 0.944272, 0.894427, -0.0894427},     {1.0, 9.0, 0.973666, 0.948683, -0.0474342},     {4.0, 1.0,  2.47214, 0.447214, -0.0447214},     {4.0, 4.0,  3.31371, 0.707107, -0.0441942},     {4.0, 9.0,  3.63331,  0.83205, -0.0320019} };
constexpr unsigned NUM_FACTORS = 8U;
constexpr cell_t CELL_ORIGIN = 0;
constexpr cell_t CELL_EMPTY = 0x8000000;
constexpr cell_t CELL_OBSTACLE = 0xfffffff;
constexpr cell_t CELL_TARGET = 0xffffffe;
const double PREVIOUS_POSES_MAX_AGE = 20;
static std::mutex s_global_mutex;
static std::string s_output_debug_path_prefix = "./reactivenav.logs";
static mrpt::nav::PTGCollisionBehavior s_collision_behavior =     mrpt::nav::PTGCollisionBehavior::BACK_AWAY;
const uint32_t COLGRID_FILE_MAGIC = 0xC0C0C0C3;
const mrpt::rtti::TRuntimeClassId* lstClasses[] = {     CLASS_ID(CLogFileRecord), };
static bool EXTERNALS_AS_TEXT_value = false;
static CSinCosLookUpTableFor2DScans velodyne_sincos_tables;
const float VLP16_BLOCK_TDURATION = 110.592f;
const float VLP16_DSR_TOFFSET = 2.304f;
const float VLP16_FIRING_TOFFSET = 55.296f;
const double HDR32_DSR_TOFFSET = 1.152;
const double HDR32_FIRING_TOFFSET = 46.08;
const auto fn_pair_make_unique = [](auto& ptr) {   ptr.pose.reset(dynamic_cast<mrpt::poses::CPose3DPDF*>(ptr.pose->clone()));   ptr.sf.reset(dynamic_cast<mrpt::obs::CSensoryFrame*>(ptr.sf->clone())); };
static const unsigned char sample_image1[];
static const unsigned char sample_image2[];
const char* velodyne_default_calib_HDL32;
const char* velodyne_default_calib_HDL64E_S3_part1;
const char* velodyne_default_calib_HDL64E_S3_part2;
const std::string velodyne_default_calib_HDL64E_S3 =     std::string(velodyne_default_calib_HDL64E_S3_part1) +     std::string(velodyne_default_calib_HDL64E_S3_part2);
const char* velodyne_default_calib_VLP16;
static std::map<std::string, VelodyneCalibration> cache_default_calibs;
static const bool SCENE_VERBOSE = mrpt::get_env<bool>("MRPT_SCENE_VERBOSE", false);
static const bool VIEWPORT_VERBOSE = mrpt::get_env<bool>("MRPT_VIEWPORT_VERBOSE", false);
Point mono_vertices[];
Font::Index mono_triangles[];
Font::Index mono_lines[];
Font::Char mono_chars[];
Font mono_font = {     mono_vertices, mono_triangles, mono_lines, mono_chars,     " $(,048<@DHLPTX\\`dhlptx|#'+/"     "37;?CGKOSW[_cgkosw{\"&*.26:>BFJNRVZ^bfjnrvz~\t!%)-159="     "AEIMQUY]aeimquy}"};
Point sans_vertices[];
Font::Index sans_triangles[];
Font::Index sans_lines[];
Font::Char sans_chars[];
Font sans_font = {     sans_vertices, sans_triangles, sans_lines, sans_chars,     " $(,048<@DHLPTX\\`dhlptx|#'+/"     "37;?CGKOSW[_cgkosw{\"&*.26:>BFJNRVZ^bfjnrvz~\t!%)-159="     "AEIMQUY]aeimquy}"};
Point serif_vertices[];
Font::Index serif_triangles[];
Font::Index serif_lines[];
Font::Char serif_chars[];
Font serif_font = {     serif_vertices, serif_triangles, serif_lines, serif_chars,     " $(,048<@DHLPTX\\`dhlptx|#'+/"     "37;?CGKOSW[_cgkosw{\"&*.26:>BFJNRVZ^bfjnrvz~\t!%)-159="     "AEIMQUY]aeimquy}"};
static const bool SHADER_VERBOSE = mrpt::get_env<bool>("MRPT_SHADER_VERBOSE", false);
static constexpr float s_skyboxVertices[108];
const bool MRPT_OPENGL_VERBOSE = mrpt::get_env<bool>("MRPT_OPENGL_VERBOSE", false);
bool USE_SUT_QUAT2EULER_CONVERSION_value = false;
bool USE_SUT_EULER2QUAT_CONVERSION_value = false;
static const std::vector<mrpt::poses::CPose3D> ptc = {     {  .0,   .0,   .0,    .0_deg,    .0_deg,    .0_deg},     { 1.0,  2.0,  3.0,    .0_deg,    .0_deg,    .0_deg},     { 1.0,  2.0,  3.0,  10.0_deg,    .0_deg,    .0_deg},     { 1.0,  2.0,  3.0,    .0_deg,   1.0_deg,    .0_deg},     { 1.0,  2.0,  3.0,    .0_deg,    .0_deg,   1.0_deg},     { 1.0,  2.0,  3.0,  80.0_deg,   5.0_deg,   5.0_deg},     { 1.0,  2.0,  3.0, -20.0_deg, -30.0_deg, -40.0_deg},     { 1.0,  2.0,  3.0, -45.0_deg,  10.0_deg,  70.0_deg},     { 1.0,  2.0,  3.0,  40.0_deg,  -5.0_deg,  25.0_deg},     { 1.0,  2.0,  3.0,  40.0_deg,  20.0_deg, -15.0_deg},     {-6.0,  2.0,  3.0,  40.0_deg,  20.0_deg,  15.0_deg},     { 6.0, -5.0,  3.0,  40.0_deg,  20.0_deg,  15.0_deg},     { 6.0,  2.0, -9.0,  40.0_deg,  20.0_deg,  15.0_deg},     { 0.0,  8.0,  5.0, -45.0_deg,  10.0_deg,  70.0_deg},     { 1.0,  0.0,  5.0, -45.0_deg,  10.0_deg,  70.0_deg},     { 1.0,  8.0,  0.0, -45.0_deg,  10.0_deg,  70.0_deg} };
const auto bb_min = mrpt::math::TPose3D(1, 2, 3, -20.0_deg, -30.0_deg, -40.0_deg);
const auto bb_max = mrpt::math::TPose3D(3, 4, 5, 20.0_deg, 30.0_deg, 40.0_deg);
static const std::vector<mrpt::poses::CPose3D> ptc = {     {  .0,   .0,  .0,    .0_deg,    .0_deg,     .0_deg},     { 1.0,  2.0, 3.0,    .0_deg,    .0_deg,     .0_deg},     { 1.0,  2.0, 3.0,  10.0_deg,    .0_deg,     .0_deg},     { 1.0,  2.0, 3.0,    .0_deg,   1.0_deg,     .0_deg},     { 1.0,  2.0, 3.0,    .0_deg,    .0_deg,    1.0_deg},     {-6.0,  2.0, 3.0,  40.0_deg,  20.0_deg,   15.0_deg},     { 1.0,  8.0, 0.0, -45.0_deg,  10.0_deg,   70.0_deg},     { 1.0,  2.0, 3.0,  89.0_deg,    .5_deg,    1.0_deg},     { 1.0, -2.0, 0.4, -89.0_deg,    .5_deg,    1.0_deg},     { 1.0,  2.0, 3.0,    .1_deg,  89.0_deg,    1.0_deg},     { 1.0, -2.0, 0.4,    .1_deg, -88.0_deg,    1.0_deg},     { 1.0,  2.0, 3.0,    .1_deg,    .9_deg,  178.0_deg},     { 1.0, -2.0, 0.4,    .1_deg,    .9_deg, -179.1_deg}, };
const double dat_A[] = {4, 5, 8, -2, 1, 3};
static thread_local CRandomGenerator randomGenerator;
const uint8_t SERIALIZATION_END_FLAG = 0x88;
const size_t NUM_OBSERVATIONS_TO_SIMUL = 15;
const size_t RANSAC_MINIMUM_INLIERS = 9;
const float normalizationStd = 0.10f;
const float ransac_mahalanobisDistanceThreshold = 5.0f;
const size_t MINIMUM_RANSAC_ITERS = 100000;
const size_t NUM_MAP_FEATS = 50;
const double MAP_SIZE_X = 30;
const double MAP_SIZE_Y = 15;
const unsigned char alphabet[64+1] =     "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
thread_local std::array<mrpt::system::ConsoleForegroundColor, NUMBER_OF_VERBOSITY_LEVELS> logging_levels_to_colors = {         ConsoleForegroundColor::BLUE,              ConsoleForegroundColor::DEFAULT,           ConsoleForegroundColor::GREEN,             ConsoleForegroundColor::RED        };
static constexpr std::array<const char*, NUMBER_OF_VERBOSITY_LEVELS> logging_levels_to_names = {     "DEBUG",       "INFO ",       "WARN ",       "ERROR"    };
static MyGlobalProfiler global_profiler;
constexpr auto EPOCH_OFFSET = static_cast<uint64_t>(116444736)* 1000000000;
static std::condition_variable cv2;
static std::mutex cv_m;
static std::mutex cv2_m;
static std::atomic<int> thrCnt = 0;
static std::atomic<int> thrDone = 0;
static const std::string sNewName = "NewName";
static const uint8_t kGridLineIndices[] = {0, 1, 1, 2, 2, 3, 3, 0, 4, 5, 5, 6,                                            6, 7, 7, 4, 0, 5, 1, 6, 2, 7, 3, 4};
static const uint8_t kCubeIndices[2 *6 *3] = {0, 1, 2, 0, 2, 3, 3, 4, 0, 4, 5, 0,                                                 0, 5, 6, 6, 1, 0, 1, 6, 7, 7, 2, 1,                                                 7, 3, 4, 2, 3, 7, 4, 7, 6, 5, 6, 4};
static const mrpt::math::TVector3Df kNormalsCube[6 *2] = {     { 1,  0,  0},     { 1,  0,  0},      { 0,  1,  0},     { 0,  1,  0},      { 0,  0,  1},     { 0,  0,  1},      { 0, -1,  0},     { 0, -1,  0},      { 0,  0, -1},     { 0,  0, -1},      {-1,  0,  0},     {-1,  0,  0},  };
const int NO_OTHER_PROPS = -1;
const char DONT_STORE_PROP = 0;
const char STORE_PROP = 1;
const char OTHER_PROP = 0;
const char NAMED_PROP = 1;
const std::map<std::string, PLY_DATA_TYPE> type_names = {     {   "char"s,   PLY_CHAR},       {  "short"s,  PLY_SHORT},      {  "int16"s,  PLY_SHORT},       {    "int"s,    PLY_INT},      {  "int32"s,    PLY_INT},       {  "uchar"s,  PLY_UCHAR},      {  "uint8"s,  PLY_UCHAR},       { "ushort"s, PLY_USHORT},      { "uint16"s, PLY_USHORT},       {   "uint"s,   PLY_UINT},      { "uint32"s,   PLY_UINT},       {  "float"s,  PLY_FLOAT},      {"float32"s,  PLY_FLOAT},       { "double"s, PLY_DOUBLE},      {"float64"s, PLY_DOUBLE},  };
const std::map<PLY_DATA_TYPE, std::string> type_names_inv = {     {  PLY_CHAR,   "char"},      { PLY_SHORT,  "short"},      {   PLY_INT,    "int"},      { PLY_UCHAR,  "uchar"},      {PLY_USHORT, "ushort"},      {  PLY_UINT,   "uint"},      { PLY_FLOAT, "float"s},      {PLY_DOUBLE, "double"},  };
const int ply_type_size[] = {0, 1, 2, 4, 1, 2, 4, 4, 8};
const float VAL_NOT_SET = -1e10;
const std::array<PlyProperty, 5> vert_props = {               PlyProperty("x", PLY_FLOAT, PLY_FLOAT, offsetof(TVertex, x)),     PlyProperty("y", PLY_FLOAT, PLY_FLOAT, offsetof(TVertex, y)),     PlyProperty("z", PLY_FLOAT, PLY_FLOAT, offsetof(TVertex, z)),     PlyProperty("intensity", PLY_FLOAT, PLY_FLOAT, offsetof(TVertex, intensity)),     PlyProperty("timestamp", PLY_FLOAT, PLY_FLOAT, offsetof(TVertex, timestamp)), };
const PlyProperty face_props[] = {        {     "intensity", PLY_FLOAT, PLY_FLOAT, offsetof(TFace, intensity)},     { "vertex_indices", PLY_INT, PLY_INT, offsetof(TFace, verts),                                           true, PLY_UCHAR, PLY_UCHAR,      offsetof(TFace, nverts)} };
const double POSE_TAIL_LENGTH = 0.1;
const double POSE_TAIL_WIDTH = 3.0;
const float POSE_POINT_SIZE = 4.0f;
const float POSE_AXIS_SCALE = 0.1f;

// global functions

MRPT_FILL_ENUM(kfEKFNaive);
MRPT_FILL_ENUM(kfEKFAlaDavison);
MRPT_FILL_ENUM(kfIKFFull);

MRPT_FILL_ENUM_CUSTOM_NAME(
    mrpt::bayes::CParticleFilter::TParticleFilterAlgorithm::StandardProposal,
    "pfStandardProposal"
    );

MRPT_FILL_ENUM_CUSTOM_NAME(
    mrpt::bayes::CParticleFilter::TParticleFilterAlgorithm::AuxiliaryPFStandard,
    "pfAuxiliaryPFStandard"
    );

MRPT_FILL_ENUM_CUSTOM_NAME(
    mrpt::bayes::CParticleFilter::TParticleFilterAlgorithm::OptimalProposal,
    "pfOptimalProposal"
    );

MRPT_FILL_ENUM_CUSTOM_NAME(
    mrpt::bayes::CParticleFilter::TParticleFilterAlgorithm::AuxiliaryPFOptimal,
    "pfAuxiliaryPFOptimal"
    );

MRPT_FILL_ENUM_CUSTOM_NAME(
    mrpt::bayes::CParticleFilter::TParticleResamplingAlgorithm::Multinomial,
    "prMultinomial"
    );

MRPT_FILL_ENUM_CUSTOM_NAME(
    mrpt::bayes::CParticleFilter::TParticleResamplingAlgorithm::Residual,
    "prResidual"
    );

MRPT_FILL_ENUM_CUSTOM_NAME(
    mrpt::bayes::CParticleFilter::TParticleResamplingAlgorithm::Stratified,
    "prStratified"
    );

MRPT_FILL_ENUM_CUSTOM_NAME(
    mrpt::bayes::CParticleFilter::TParticleResamplingAlgorithm::Systematic,
    "prSystematic"
    );

PYBIND11_MODULE(
    _bindings,
    m
    );

TEST(
    BayesTest,
    log2linearWeights_sum_to_one
    );

TEST(
    BayesTest,
    logWeightsToLinear_matches_log2linearWeights
    );

TEST(
    BayesTest,
    ESS_equal_weights_is_one
    );

TEST(
    BayesTest,
    ESS_one_dominant_weight_is_near_zero
    );

TEST(
    BayesTest,
    normalizeWeights_max_becomes_zero
    );

static void check_resampling(CParticleFilter::TParticleResamplingAlgorithm method);

TEST(
    BayesTest,
    computeResampling_Multinomial
    );

TEST(
    BayesTest,
    computeResampling_Residual
    );

TEST(
    BayesTest,
    computeResampling_Stratified
    );

TEST(
    BayesTest,
    computeResampling_Systematic
    );

TEST(
    BayesTest,
    computeResampling_dominated_weight
    );

TEST(
    BayesTest,
    performSubstitution_value_storage
    );

TEST(
    BayesTest,
    getWeights_return_by_value
    );

TEST(
    BayesTest,
    rejectionSampling_samples_near_zero
    );

int main(
    int argc,
    char** argv
    );

PYBIND11_MODULE(
    _bindings,
    m
    );

TEST(
    NodeletsTests,
    pub_sub_multithread_test
    );

TEST(
    SocketTests,
    send_receive_object
    );

PYBIND11_MODULE(
    _bindings,
    m
    );

TEST(
    CConfigFileMemory,
    readwrite
    );

TEST(
    CConfigFileMemory,
    Sections
    );

TEST(
    CConfigFileMemory,
    Names
    );

TEST(
    CConfigFileMemory,
    setFromString
    );

TEST(
    CConfigFileMemory,
    readMultiLineStrings
    );

TEST(
    CConfigFile,
    readMultiLineStrings
    );

TEST(
    CConfigFileMemory,
    parseVariables
    );

static py::object yaml_to_python(const yaml& y);
static yaml yaml_from_python(const py::object& obj);

PYBIND11_MODULE(
    _bindings,
    m
    );

const yaml::node_t& findKeyNode(
    const yaml::node_t* me,
    const std::string& key
    );

TEST(
    bimap,
    operations
    );

TEST(
    CDynamicGrid,
    GetSetAndResize
    );

TEST(
    CDynamicGrid,
    rangeForLoop
    );

TEST(
    circular_buffer_tests,
    EmptyPop
    );

TEST(
    circular_buffer_tests,
    EmptyPopAfterPushes
    );

TEST(
    circular_buffer_tests,
    RandomWriteAndPeek
    );

TEST(
    circular_buffer_tests,
    RandomWriteManyAndPeek
    );

TEST(
    circular_buffer_tests,
    RandomWriteAndPeekOverrun
    );

TEST(
    circular_buffer_tests,
    Size
    );

template <typename T>
void impl_WritePeekCheck();

TEST(
    circular_buffer_tests,
    WritePeekCheck_uint8_t
    );

TEST(
    circular_buffer_tests,
    WritePeekCheck_uint16_t
    );

TEST(
    circular_buffer_tests,
    WritePeekCheck_uint32_t
    );

TEST(
    circular_buffer_tests,
    WritePeekCheck_uint64_t
    );

TEST(
    find_closest,
    testStdMap
    );

TEST(
    find_closest,
    testStdMultiMap
    );

TEST(
    find_closest_with_tolerance,
    testStdMap
    );

TEST(
    copy_ptr,
    SimpleOps
    );

TEST(
    copy_ptr,
    StlContainer
    );

TEST(
    poly_ptr,
    SimpleOps
    );

TEST(
    poly_ptr,
    StlContainer
    );

template <typename T>
void simple_test_hash_string();

TEST(
    ts_hash_map,
    string_hash_u8
    );

TEST(
    ts_hash_map,
    string_hash_u16
    );

TEST(
    ts_hash_map,
    string_hash_u32
    );

TEST(
    ts_hash_map,
    string_hash_u64
    );

TEST(
    ts_hash_map,
    stdstring_key
    );

TEST(
    vector_with_small_size_optimization,
    Empty
    );

TEST(
    vector_with_small_size_optimization,
    ResizeSize
    );

TEST(
    vector_with_small_size_optimization,
    ResizeWriteRead
    );

TEST(
    vector_with_small_size_optimization,
    ResizeWriteReadIterators
    );

TEST(
    vector_with_small_size_optimization,
    GrowCheckContents
    );

TEST(
    vector_with_small_size_optimization,
    ShrinkCheckContents
    );

TEST(
    vector_with_small_size_optimization,
    GrowCheckFrontBack
    );

TEST(
    vector_with_small_size_optimization,
    push_back
    );

TEST(
    containers_visit_each,
    call_all
    );

MRPT_TEST(
    yaml,
    emptyCtor
    );

MRPT_TEST(
    yaml,
    assignments
    );

MRPT_TEST(
    yaml,
    initializers
    );

MRPT_TEST(
    yaml,
    initializerMap
    );

MRPT_TEST(
    yaml,
    initializerSequence
    );

MRPT_TEST(
    yaml,
    nested
    );

MRPT_TEST(
    yaml,
    nested2
    );

MRPT_TEST(
    yaml,
    printYAML
    );

MRPT_TEST(
    yaml,
    printDebugStructure
    );

MRPT_TEST(
    yaml,
    ctorMap
    );

MRPT_TEST(
    yaml,
    comments
    );

MRPT_TEST(
    yaml,
    iterate
    );

MRPT_TEST(
    yaml,
    macros
    );

MRPT_TEST(
    yaml,
    hexadecimal
    );

void foo(mrpt::containers::yaml_ref p);

MRPT_TEST(
    yaml,
    assignmentsInCallee
    );

PYBIND11_MODULE(
    _bindings,
    m
    );

uint64_t as_nanoseconds(const struct timespec& ts);

void from_nanoseconds(
    const uint64_t ns,
    struct timespec& ts
    );

template <typename T>
void reverseBytesInPlace_2b(T& v_in_out);

template <typename T>
void reverseBytesInPlace_4b(T& v_in_out);

template <typename T>
void reverseBytesInPlace_8b(T& v_in_out);

template <
    std::size_t alignment,
    typename T,
    typename = std::enable_if_t<std::is_pointer<T>::value>
    >
bool my_is_aligned(T ptr);

TEST(
    aligned_allocator,
    aligned_malloc
    );

TEST(
    aligned_allocator,
    aligned_calloc
    );

TEST(
    bits_math,
    sign
    );

TEST(
    bits_math,
    keep_min
    );

TEST(
    bits_math,
    keep_max
    );

TEST(
    bits_math,
    round2up
    );

TEST(
    bits_math,
    hypot_fast
    );

TEST(
    bits_math,
    deg_rad
    );

TEST(
    bits_math,
    signWithZero
    );

TEST(
    bits_math,
    abs_diff
    );

TEST(
    bits_math,
    min3
    );

TEST(
    bits_math,
    max3
    );

TEST(
    bits_math,
    fix
    );

TEST(
    bits_math,
    saturate_val
    );

TEST(
    bits_math,
    saturate
    );

TEST(
    bits_math,
    lowestPositive
    );

TEST(
    clock,
    delay_Realtime
    );

TEST(
    clock,
    changeSource
    );

TEST(
    clock,
    checkSynchEpoch
    );

TEST(
    clock,
    fromDouble_toDouble_roundtrip
    );

TEST(
    clock,
    fromDouble_negativeAndNearEpoch
    );

TEST(
    clock,
    simulatedTime
    );

TEST(
    constexpr_for,
    compileTest
    );

TEST(
    cpu,
    features_as_string
    );

TEST(
    cpu,
    supports
    );

TEST(
    exception,
    stackedExceptionBasic
    );

template <typename T>
void test_except_3rd_lvl(T val);

void test_except_2nd_lvl();
void test_except_toplevel();

TEST(
    exception,
    stackedExceptionComplex
    );

TEST(
    exception,
    assertException
    );

TEST(
    exception,
    infiniteRecurseBug
    );

TEST(
    exception,
    assertMacros
    );

TEST(
    FormatTest,
    LargeStrings
    );

TEST(
    FormatTest,
    ToString
    );

TEST(
    FromStringTests,
    Basic
    );

TEST(
    is_defined,
    tests1
    );

TEST(
    lock_helper,
    testCompilation
    );

TEST(
    bits,
    reverseBytes
    );

TEST(
    round,
    longRound
    );

TEST(
    WorkerThreadsPool,
    runTasks
    );

PYBIND11_MODULE(
    _bindings,
    m
    );

TEST_F(
    VerboseTest,
    VerbosePath
    );

TEST_F(
    VerboseMatchTest,
    VerboseMatchPath
    );

TEST(
    RuntimeCompiledExpression,
    SimpleTest
    );

TEST(
    RuntimeCompiledExpression,
    CustomFunctions
    );

TEST(
    RuntimeCompiledExpression,
    GetOriginalExpression
    );

TEST(
    RuntimeCompiledExpression,
    GetRawExprtk
    );

TEST(
    RuntimeCompiledExpression,
    RegisterSymbolTablePointers
    );

TEST(
    RuntimeCompiledExpression,
    MathConstants
    );

TEST(
    RuntimeCompiledExpression,
    InvalidExpressionThrows
    );

TEST(
    RuntimeCompiledExpression,
    Recompile
    );

TEST(
    RuntimeCompiledExpression,
    ExprNameInErrorMessage
    );

TEST(
    RuntimeCompiledExpression,
    Trigonometric_sin
    );

TEST(
    RuntimeCompiledExpression,
    Trigonometric_cos
    );

TEST(
    RuntimeCompiledExpression,
    Trigonometric_tan
    );

TEST(
    RuntimeCompiledExpression,
    Trigonometric_asin
    );

TEST(
    RuntimeCompiledExpression,
    Trigonometric_acos
    );

TEST(
    RuntimeCompiledExpression,
    Trigonometric_atan
    );

TEST(
    RuntimeCompiledExpression,
    Trigonometric_atan2
    );

TEST(
    RuntimeCompiledExpression,
    MathBuiltin_sqrt
    );

TEST(
    RuntimeCompiledExpression,
    MathBuiltin_abs
    );

TEST(
    RuntimeCompiledExpression,
    MathBuiltin_exp_log
    );

TEST(
    RuntimeCompiledExpression,
    MathBuiltin_log2_log10
    );

TEST(
    RuntimeCompiledExpression,
    MathBuiltin_ceil_floor
    );

TEST(
    RuntimeCompiledExpression,
    MathBuiltin_round
    );

TEST(
    RuntimeCompiledExpression,
    MathBuiltin_min_max
    );

TEST(
    RuntimeCompiledExpression,
    MathBuiltin_pow
    );

TEST(
    RuntimeCompiledExpression,
    Conditional_if_true_branch
    );

TEST(
    RuntimeCompiledExpression,
    Conditional_if_false_branch
    );

TEST(
    RuntimeCompiledExpression,
    Conditional_if_nested
    );

TEST(
    RuntimeCompiledExpression,
    LogicalAnd
    );

TEST(
    RuntimeCompiledExpression,
    LogicalOr
    );

TEST(
    RuntimeCompiledExpression,
    LogicalNot
    );

TEST(
    RuntimeCompiledExpression,
    CompoundSaturation
    );

TEST(
    RuntimeCompiledExpression,
    CompoundTrigExpression
    );

TEST(
    RuntimeCompiledExpression,
    CompoundMultiVar
    );

template <typename CPOSE>
void bind_CNetworkOfPoses(
    py::module& m,
    const char* className
    );

PYBIND11_MODULE(
    _bindings,
    m
    );

MRPT_INITIALIZER(registerAllClasses_mrpt_graphs);
MRPT_INITIALIZER(registerAllClasses_mrpt_gui);
MRPT_INITIALIZER(registerAllClasses_mrpt_hwdrivers);
MRPT_INITIALIZER(registerAllClasses_mrpt_img);
MRPT_INITIALIZER(registerAllClasses_mrpt_kinematics);
MRPT_INITIALIZER(registerAllClasses_mrpt_apps);
MRPT_INITIALIZER(registerAllClasses_mrpt_apps);
MRPT_INITIALIZER(registerAllClasses_mrpt_maps);
MRPT_INITIALIZER(registerAllClasses_mrpt_math);
MRPT_INITIALIZER(registerAllClasses_mrpt_nav);
MRPT_INITIALIZER(registerAllClasses_mrpt_obs);
MRPT_INITIALIZER(registerAllClasses_mrpt_poses);
MRPT_INITIALIZER(registerAllClasses_mrpt_slam);
MRPT_INITIALIZER(registerAllClasses_mrpt_tfest);
MRPT_INITIALIZER(registerAllClasses_mrpt_topography);
MRPT_INITIALIZER(registerAllClasses_mrpt_viz);

PYBIND11_MODULE(
    _bindings,
    m
    );

static void MyGetScaledClientSize(
    const wxWindow* w,
    int& width,
    int& height
    );

EVT_RIGHT_DOWN(mpWindow::OnMouseRightDown);
CDisplayWindow_WXAPP& wxGetApp();

MRPT_FILL_ENUM_MEMBER(
    mrpt::hwdrivers::CGenericSensor,
    ssInitializing
    );

MRPT_FILL_ENUM_MEMBER(
    mrpt::hwdrivers::CGenericSensor,
    ssWorking
    );

MRPT_FILL_ENUM_MEMBER(
    mrpt::hwdrivers::CGenericSensor,
    ssError
    );

MRPT_FILL_ENUM_MEMBER(
    mrpt::hwdrivers::CGenericSensor,
    ssUninitialized
    );

MRPT_FILL_ENUM_MEMBER(
    CGPSInterface,
    NONE
    );

MRPT_FILL_ENUM_MEMBER(
    CGPSInterface,
    AUTO
    );

MRPT_FILL_ENUM_MEMBER(
    CGPSInterface,
    NMEA
    );

MRPT_FILL_ENUM_MEMBER(
    CGPSInterface,
    NOVATEL_OEM6
    );

MRPT_FILL_ENUM_MEMBER(
    mrpt::hwdrivers,
    CAMERA_CV_AUTODETECT
    );

MRPT_FILL_ENUM_MEMBER(
    mrpt::hwdrivers,
    CAMERA_CV_DC1394
    );

MRPT_FILL_ENUM_MEMBER(
    mrpt::hwdrivers,
    CAMERA_CV_VFL
    );

MRPT_FILL_ENUM_MEMBER(
    mrpt::hwdrivers,
    CAMERA_CV_DSHOW
    );

MRPT_FILL_ENUM_MEMBER(
    CKinect,
    VIDEO_CHANNEL_RGB
    );

MRPT_FILL_ENUM_MEMBER(
    CKinect,
    VIDEO_CHANNEL_IR
    );

MRPT_FILL_ENUM_MEMBER(
    CVelodyneScanner,
    VLP16
    );

MRPT_FILL_ENUM_MEMBER(
    CVelodyneScanner,
    HDL32
    );

MRPT_FILL_ENUM_MEMBER(
    CVelodyneScanner,
    HDL64
    );

MRPT_FILL_ENUM_MEMBER(
    CVelodyneScanner,
    UNCHANGED
    );

MRPT_FILL_ENUM_MEMBER(
    CVelodyneScanner,
    STRONGEST
    );

MRPT_FILL_ENUM_MEMBER(
    CVelodyneScanner,
    LAST
    );

MRPT_FILL_ENUM_MEMBER(
    CVelodyneScanner,
    DUAL
    );

char hexCharToInt(char n);
std::atomic<int> numInstances(0);
bool isValidParameter(const mrpt::img::TCamera& param);

TEST(
    CGPSInterface,
    parse_NMEA_GGA
    );

TEST(
    CGPSInterface,
    parse_NMEA_RMC
    );

TEST(
    CGPSInterface,
    parse_NMEA_GLL
    );

TEST(
    CGPSInterface,
    parse_NMEA_VTG
    );

TEST(
    CGPSInterface,
    parse_NMEA_ZDA
    );

TEST(
    CGPSInterface,
    parse_NMEA_ZDA_stream
    );

TEST(
    CGPSInterface,
    parse_NOVATEL6_stream
    );

TEST(
    CGPSInterface,
    parse_NMEA_stream
    );

MRPT_FILL_ENUM_MEMBER(
    mrpt::img,
    cmNONE
    );

MRPT_FILL_ENUM_MEMBER(
    mrpt::img,
    cmGRAYSCALE
    );

MRPT_FILL_ENUM_MEMBER(
    mrpt::img,
    cmJET
    );

MRPT_FILL_ENUM_MEMBER(
    mrpt::img,
    cmHOT
    );

MRPT_FILL_ENUM_MEMBER(
    mrpt::img::DistortionModel,
    none
    );

MRPT_FILL_ENUM_MEMBER(
    mrpt::img::DistortionModel,
    plumb_bob
    );

MRPT_FILL_ENUM_MEMBER(
    mrpt::img::DistortionModel,
    kannala_brandt
    );

PYBIND11_MODULE(
    _bindings,
    m
    );

void init_fonts_list();

void image_SSE2_scale_half_1c8u(
    const uint8_t* in,
    uint8_t* out,
    int w,
    int h,
    size_t in_step,
    size_t out_step
    );

void image_SSSE3_scale_half_3c8u(
    const uint8_t* in,
    uint8_t* out,
    int w,
    int h,
    size_t in_step,
    size_t out_step
    );

void image_SSE2_scale_half_smooth_1c8u(
    const uint8_t* in,
    uint8_t* out,
    int w,
    int h,
    size_t in_step,
    size_t out_step
    );

void image_SSSE3_rgb_to_gray_8u(
    const uint8_t* in,
    uint8_t* out,
    int w,
    int h,
    size_t in_step,
    size_t out_step
    );

void image_SSSE3_bgr_to_gray_8u(
    const uint8_t* in,
    uint8_t* out,
    int w,
    int h,
    size_t in_step,
    size_t out_step
    );

STBIDEF stbi_uc* stbi_load_from_memory(
    stbi_uc const* buffer,
    int len,
    int* x,
    int* y,
    int* channels_in_file,
    int desired_channels
    );

STBIDEF stbi_uc* stbi_load_from_callbacks(
    stbi_io_callbacks const* clbk,
    void* user,
    int* x,
    int* y,
    int* channels_in_file,
    int desired_channels
    );

STBIDEF stbi_uc* stbi_load(
    char const* filename,
    int* x,
    int* y,
    int* channels_in_file,
    int desired_channels
    );

STBIDEF stbi_uc* stbi_load_from_file(
    FILE* f,
    int* x,
    int* y,
    int* channels_in_file,
    int desired_channels
    );

STBIDEF stbi_uc* stbi_load_gif_from_memory(
    stbi_uc const* buffer,
    int len,
    int** delays,
    int* x,
    int* y,
    int* z,
    int* comp,
    int req_comp
    );

STBIDEF stbi_us* stbi_load_16_from_memory(
    stbi_uc const* buffer,
    int len,
    int* x,
    int* y,
    int* channels_in_file,
    int desired_channels
    );

STBIDEF stbi_us* stbi_load_16_from_callbacks(
    stbi_io_callbacks const* clbk,
    void* user,
    int* x,
    int* y,
    int* channels_in_file,
    int desired_channels
    );

STBIDEF stbi_us* stbi_load_16(
    char const* filename,
    int* x,
    int* y,
    int* channels_in_file,
    int desired_channels
    );

STBIDEF stbi_us* stbi_load_from_file_16(
    FILE* f,
    int* x,
    int* y,
    int* channels_in_file,
    int desired_channels
    );

STBIDEF float* stbi_loadf_from_memory(
    stbi_uc const* buffer,
    int len,
    int* x,
    int* y,
    int* channels_in_file,
    int desired_channels
    );

STBIDEF float* stbi_loadf_from_callbacks(
    stbi_io_callbacks const* clbk,
    void* user,
    int* x,
    int* y,
    int* channels_in_file,
    int desired_channels
    );

STBIDEF float* stbi_loadf(
    char const* filename,
    int* x,
    int* y,
    int* channels_in_file,
    int desired_channels
    );

STBIDEF float* stbi_loadf_from_file(
    FILE* f,
    int* x,
    int* y,
    int* channels_in_file,
    int desired_channels
    );

STBIDEF void stbi_hdr_to_ldr_gamma(float gamma);
STBIDEF void stbi_hdr_to_ldr_scale(float scale);
STBIDEF void stbi_ldr_to_hdr_gamma(float gamma);
STBIDEF void stbi_ldr_to_hdr_scale(float scale);

STBIDEF int stbi_is_hdr_from_callbacks(
    stbi_io_callbacks const* clbk,
    void* user
    );

STBIDEF int stbi_is_hdr_from_memory(
    stbi_uc const* buffer,
    int len
    );

STBIDEF int stbi_is_hdr(char const* filename);
STBIDEF int stbi_is_hdr_from_file(FILE* f);
STBIDEF const char* stbi_failure_reason(void);
STBIDEF void stbi_image_free(void* retval_from_stbi_load);

STBIDEF int stbi_info_from_memory(
    stbi_uc const* buffer,
    int len,
    int* x,
    int* y,
    int* comp
    );

STBIDEF int stbi_info_from_callbacks(
    stbi_io_callbacks const* clbk,
    void* user,
    int* x,
    int* y,
    int* comp
    );

STBIDEF int stbi_is_16_bit_from_memory(
    stbi_uc const* buffer,
    int len
    );

STBIDEF int stbi_is_16_bit_from_callbacks(
    stbi_io_callbacks const* clbk,
    void* user
    );

STBIDEF int stbi_info(
    char const* filename,
    int* x,
    int* y,
    int* comp
    );

STBIDEF int stbi_info_from_file(
    FILE* f,
    int* x,
    int* y,
    int* comp
    );

STBIDEF int stbi_is_16_bit(char const* filename);
STBIDEF int stbi_is_16_bit_from_file(FILE* f);
STBIDEF void stbi_set_unpremultiply_on_load(int flag_true_if_should_unpremultiply);
STBIDEF void stbi_convert_iphone_png_to_rgb(int flag_true_if_should_convert);
STBIDEF void stbi_set_flip_vertically_on_load(int flag_true_if_should_flip);
STBIDEF void stbi_set_unpremultiply_on_load_thread(int flag_true_if_should_unpremultiply);
STBIDEF void stbi_convert_iphone_png_to_rgb_thread(int flag_true_if_should_convert);
STBIDEF void stbi_set_flip_vertically_on_load_thread(int flag_true_if_should_flip);

STBIDEF char* stbi_zlib_decode_malloc_guesssize(
    const char* buffer,
    int len,
    int initial_size,
    int* outlen
    );

STBIDEF char* stbi_zlib_decode_malloc_guesssize_headerflag(
    const char* buffer,
    int len,
    int initial_size,
    int* outlen,
    int parse_header
    );

STBIDEF char* stbi_zlib_decode_malloc(
    const char* buffer,
    int len,
    int* outlen
    );

STBIDEF int stbi_zlib_decode_buffer(
    char* obuffer,
    int olen,
    const char* ibuffer,
    int ilen
    );

STBIDEF char* stbi_zlib_decode_noheader_malloc(
    const char* buffer,
    int len,
    int* outlen
    );

STBIDEF int stbi_zlib_decode_noheader_buffer(
    char* obuffer,
    int olen,
    const char* ibuffer,
    int ilen
    );

STBIRDEF unsigned char* stbir_resize_uint8_srgb(
    const unsigned char* input_pixels,
    int input_w,
    int input_h,
    int input_stride_in_bytes,
    unsigned char* output_pixels,
    int output_w,
    int output_h,
    int output_stride_in_bytes,
    stbir_pixel_layout pixel_type
    );

STBIRDEF unsigned char* stbir_resize_uint8_linear(
    const unsigned char* input_pixels,
    int input_w,
    int input_h,
    int input_stride_in_bytes,
    unsigned char* output_pixels,
    int output_w,
    int output_h,
    int output_stride_in_bytes,
    stbir_pixel_layout pixel_type
    );

STBIRDEF float* stbir_resize_float_linear(
    const float* input_pixels,
    int input_w,
    int input_h,
    int input_stride_in_bytes,
    float* output_pixels,
    int output_w,
    int output_h,
    int output_stride_in_bytes,
    stbir_pixel_layout pixel_type
    );

STBIRDEF void* stbir_resize(
    const void* input_pixels,
    int input_w,
    int input_h,
    int input_stride_in_bytes,
    void* output_pixels,
    int output_w,
    int output_h,
    int output_stride_in_bytes,
    stbir_pixel_layout pixel_layout,
    stbir_datatype data_type,
    stbir_edge edge,
    stbir_filter filter
    );

STBIRDEF void stbir_resize_init(
    STBIR_RESIZE* resize,
    const void* input_pixels,
    int input_w,
    int input_h,
    int input_stride_in_bytes,
    void* output_pixels,
    int output_w,
    int output_h,
    int output_stride_in_bytes,
    stbir_pixel_layout pixel_layout,
    stbir_datatype data_type
    );

STBIRDEF void stbir_set_datatypes(
    STBIR_RESIZE* resize,
    stbir_datatype input_type,
    stbir_datatype output_type
    );

STBIRDEF void stbir_set_pixel_callbacks(
    STBIR_RESIZE* resize,
    stbir_input_callback* input_cb,
    stbir_output_callback* output_cb
    );

STBIRDEF void stbir_set_user_data(
    STBIR_RESIZE* resize,
    void* user_data
    );

STBIRDEF void stbir_set_buffer_ptrs(
    STBIR_RESIZE* resize,
    const void* input_pixels,
    int input_stride_in_bytes,
    void* output_pixels,
    int output_stride_in_bytes
    );

STBIRDEF int stbir_set_pixel_layouts(
    STBIR_RESIZE* resize,
    stbir_pixel_layout input_pixel_layout,
    stbir_pixel_layout output_pixel_layout
    );

STBIRDEF int stbir_set_edgemodes(
    STBIR_RESIZE* resize,
    stbir_edge horizontal_edge,
    stbir_edge vertical_edge
    );

STBIRDEF int stbir_set_filters(
    STBIR_RESIZE* resize,
    stbir_filter horizontal_filter,
    stbir_filter vertical_filter
    );

STBIRDEF int stbir_set_filter_callbacks(
    STBIR_RESIZE* resize,
    stbir__kernel_callback* horizontal_filter,
    stbir__support_callback* horizontal_support,
    stbir__kernel_callback* vertical_filter,
    stbir__support_callback* vertical_support
    );

STBIRDEF int stbir_set_pixel_subrect(
    STBIR_RESIZE* resize,
    int subx,
    int suby,
    int subw,
    int subh
    );

STBIRDEF int stbir_set_input_subrect(
    STBIR_RESIZE* resize,
    double s0,
    double t0,
    double s1,
    double t1
    );

STBIRDEF int stbir_set_output_pixel_subrect(
    STBIR_RESIZE* resize,
    int subx,
    int suby,
    int subw,
    int subh
    );

STBIRDEF int stbir_set_non_pm_alpha_speed_over_quality(
    STBIR_RESIZE* resize,
    int non_pma_alpha_speed_over_quality
    );

STBIRDEF int stbir_build_samplers(STBIR_RESIZE* resize);
STBIRDEF void stbir_free_samplers(STBIR_RESIZE* resize);
STBIRDEF int stbir_resize_extended(STBIR_RESIZE* resize);
STBIRDEF int stbir_build_samplers_with_splits(STBIR_RESIZE* resize, int try_splits);

STBIRDEF int stbir_resize_extended_split(
    STBIR_RESIZE* resize,
    int split_start,
    int split_count
    );

STBIWDEF int stbi_write_png(
    char const* filename,
    int w,
    int h,
    int comp,
    const void* data,
    int stride_in_bytes
    );

STBIWDEF int stbi_write_bmp(
    char const* filename,
    int w,
    int h,
    int comp,
    const void* data
    );

STBIWDEF int stbi_write_tga(
    char const* filename,
    int w,
    int h,
    int comp,
    const void* data
    );

STBIWDEF int stbi_write_hdr(
    char const* filename,
    int w,
    int h,
    int comp,
    const float* data
    );

STBIWDEF int stbi_write_jpg(
    char const* filename,
    int x,
    int y,
    int comp,
    const void* data,
    int quality
    );

STBIWDEF int stbi_write_png_to_func(
    stbi_write_func* func,
    void* context,
    int w,
    int h,
    int comp,
    const void* data,
    int stride_in_bytes
    );

STBIWDEF int stbi_write_bmp_to_func(
    stbi_write_func* func,
    void* context,
    int w,
    int h,
    int comp,
    const void* data
    );

STBIWDEF int stbi_write_tga_to_func(
    stbi_write_func* func,
    void* context,
    int w,
    int h,
    int comp,
    const void* data
    );

STBIWDEF int stbi_write_hdr_to_func(
    stbi_write_func* func,
    void* context,
    int w,
    int h,
    int comp,
    const float* data
    );

STBIWDEF int stbi_write_jpg_to_func(
    stbi_write_func* func,
    void* context,
    int x,
    int y,
    int comp,
    const void* data,
    int quality
    );

STBIWDEF void stbi_flip_vertically_on_write(int flip_boolean);
int main(int argc, char** argv);

TEST(
    CameraGeometry,
    ProjectPointNoDist_Identity
    );

TEST(
    CameraGeometry,
    ProjectPointNoDist_CameraOffset
    );

TEST(
    CameraGeometry,
    ProjectPoints_Batch
    );

TEST(
    CameraGeometry,
    ProjectPoint_BehindCamera
    );

TEST(
    CameraGeometry,
    ProjectPointsPlumbBob_GroundTruth
    );

TEST(
    CameraGeometry,
    ProjectPointsFisheye_GroundTruth
    );

TEST(
    CameraGeometry,
    ProjectPoint_CenterNoDistortion
    );

TEST(
    CameraGeometry,
    UndistortPoint_PlumbBob_GroundTruth
    );

TEST(
    CameraGeometry,
    UndistortPoints_Batch
    );

TEST(
    CameraGeometry,
    UndistortPoint_NoDist_Identity
    );

TEST(
    CameraGeometry,
    UndistortToUnitPlane_Center
    );

TEST(
    CameraGeometry,
    UndistortToUnitPlane_Consistency
    );

TEST(
    CameraGeometry,
    DistortionPlumbBob_Normalized_GroundTruth
    );

TEST(
    CameraGeometry,
    DistortionPlumbBob_RoundTrip
    );

TEST(
    CameraGeometry,
    DistortionKannalaBrandt_RoundTrip
    );

TEST(
    CameraGeometry,
    DistortionKannalaBrandt_Origin
    );

TEST(
    CameraGeometry,
    ProjectPoint_ZeroDepth
    );

TEST(
    CameraGeometry,
    EmptyInputs
    );

TEST(
    CameraGeometry,
    ProjectLargePointCloud
    );

TEST(
    CImage,
    CtorDefault
    );

TEST(
    CImage,
    CtorSized
    );

TEST(
    CImage,
    GetSetPixel
    );

TEST(
    CImage,
    CopyMoveSwap
    );

TEST(
    CImage,
    ExternalImage
    );

TEST(
    CImage,
    ConvertGray
    );

TEST(
    CImage,
    CtorRefOrGray
    );

TEST(
    CImage,
    HalfAndDouble
    );

TEST(
    CImage,
    getChannelsOrder
    );

TEST(
    CImage,
    ScaleImage
    );

TEST(
    CImage,
    Serialize
    );

TEST(
    CImage,
    KLT_response
    );

TEST(
    CImage,
    LoadAndComparePseudoRnd
    );

TEST(
    CImage,
    LoadAndSave
    );

TEST(
    CImage,
    DifferentAccessMethodsColor
    );

TEST(
    CImage,
    DifferentAccessMethodsGray
    );

TEST(
    CImage,
    NormalizeStretchesRange
    );

TEST(
    CImage,
    FilterMedianRemovesImpulseNoise
    );

TEST(
    CImage,
    FilterGaussianSmoothing
    );

TEST(
    CImage,
    RotateImageIdentity
    );

TEST(
    CImage,
    DrawChessboardCorners
    );

TEST(
    CImagePyramid,
    BuildPyramid_gray_sizes
    );

TEST(
    CImagePyramid,
    BuildPyramid_gray_noSmooth
    );

TEST(
    CImagePyramid,
    BuildPyramid_color
    );

TEST(
    CImagePyramid,
    BuildPyramid_color_toGray
    );

TEST(
    CImagePyramid,
    BuildPyramidFast
    );

TEST(
    CImagePyramid,
    BuildPyramid_singleOctave
    );

TEST(
    CImagePyramid,
    BuildPyramid_fromFile
    );

TEST(
    color_maps,
    cmGRAYSCALE
    );

TEST(
    color_maps,
    cmJET
    );

TEST(
    color_maps,
    cmHOT
    );

TEST(
    CUndistortMap,
    SetFromCamParams
    );

TEST(
    CUndistortMap,
    Undistort_identity
    );

TEST(
    CUndistortMap,
    Undistort_plumbbob_grayscale
    );

TEST(
    CUndistortMap,
    Undistort_plumbbob_color
    );

TEST(
    CUndistortMap,
    Undistort_kannalaBrandt
    );

TEST(
    CUndistortMap,
    Undistort_inPlace
    );

TEST(
    CUndistortMap,
    Undistort_fromFile
    );

TEST(
    CImage,
    Undistort
    );

TEST(
    CStereoRectifyMap,
    SetFromCamParams
    );

TEST(
    CStereoRectifyMap,
    Rectify_basic
    );

TEST(
    CStereoRectifyMap,
    Rectify_color
    );

void generateProjectionTestData();
void generateUndistortionTestData();
void generateNormalizedDistortionData();
void generateFisheyeTestData();
void validateRoundTrip();
void printUsageInstructions();
int main();
static TCamera getSampleCameraParamsBase();
static TCamera getSampleCameraParamsPlumbBob();
static TCamera getSampleCameraParamsFishEye();

TEST(
    TCamera,
    EqualOperator
    );

TEST(
    TCamera,
    CopyCtor
    );

TEST(
    TCamera,
    ToFromINI_PlumbBob
    );

TEST(
    TCamera,
    ToFromINI_FishEye
    );

MRPT_FILL_ENUM(CompressionType::None);
MRPT_FILL_ENUM(CompressionType::Gzip);
MRPT_FILL_ENUM(CompressionType::Zstd);

PYBIND11_MODULE(
    _bindings,
    m
    );

static std::string LAZY_LOAD_PATH_BASE(".");

TEST(
    CFileStream,
    OpenNonExistingForReadFails
    );

TEST(
    CFileStream,
    WriteReadCycle
    );

TEST(
    CFileStream,
    ReadLine
    );

TEST(
    CFileStream,
    ConstructorThrowsOnInvalidFile
    );

TEST(
    CFileStream,
    UninitializedStreamReadWriteReturnZero
    );

TEST(
    CMemoryStream,
    readwrite
    );

TEST(
    CPipe,
    WriteReadRoundTrip
    );

TEST(
    CPipe,
    SerializeAndReconstructEndPoint
    );

TEST(
    CPipe,
    SeekAndCountsAreNoOps
    );

TEST(
    CPipe,
    SerializeOnClosedPipeThrows
    );

TEST(
    CPipe,
    InvalidSerializedStringThrows
    );

TEST(
    CTextFileLinesParser,
    parse
    );

TEST(
    file_get_contents,
    readTestFile
    );

TEST(
    file_get_contents,
    throwOnError
    );

TEST(
    Compress,
    DataBlockGZ
    );

PYBIND11_MODULE(
    _bindings,
    m
    );

void addBar_D(
    mrpt::viz::CSetOfObjects::Ptr& objs,
    const double d
    );

void addBar_A(
    mrpt::viz::CSetOfObjects::Ptr& objs,
    const double a
    );

template <typename T>
bool getArgValue(
    CLI::App& cmdline,
    const std::string& arg_name,
    T& out_val
    );

bool isFlagSet(
    CLI::App& cmdline,
    const std::string& arg_name
    );

DECLARE_OP_FUNCTION(op_export_txt);
DECLARE_OP_FUNCTION(op_export_2d_scans_txt);
DECLARE_OP_FUNCTION(op_export_txt);
DECLARE_OP_FUNCTION(op_export_anemometer_txt);
DECLARE_OP_FUNCTION(op_camera_params);
DECLARE_OP_FUNCTION(op_cut);
DECLARE_OP_FUNCTION(op_deexternalize);
DECLARE_OP_FUNCTION(op_describe);
DECLARE_OP_FUNCTION(op_export_enose_txt);
DECLARE_OP_FUNCTION(op_export_txt);
DECLARE_OP_FUNCTION(op_externalize);
DECLARE_OP_FUNCTION(op_remove_label);
DECLARE_OP_FUNCTION(op_keep_label);
DECLARE_OP_FUNCTION(op_generate_3d_pointclouds);
DECLARE_OP_FUNCTION(op_export_gps_kml);
DECLARE_OP_FUNCTION(op_export_gps_txt);
DECLARE_OP_FUNCTION(op_export_gps_all);
DECLARE_OP_FUNCTION(op_export_gps_gas_kml);
DECLARE_OP_FUNCTION(op_export_txt);
DECLARE_OP_FUNCTION(op_export_imu_txt);
DECLARE_OP_FUNCTION(op_info);
DECLARE_OP_FUNCTION(op_list_images);
DECLARE_OP_FUNCTION(op_list_poses);
DECLARE_OP_FUNCTION(op_list_rangebearing);
DECLARE_OP_FUNCTION(op_list_timestamps);
DECLARE_OP_FUNCTION(op_export_txt);
DECLARE_OP_FUNCTION(op_export_odometry_txt);
DECLARE_OP_FUNCTION(op_recalc_odometry);
DECLARE_OP_FUNCTION(op_export_rawdaq_txt);
DECLARE_OP_FUNCTION(op_remap_timestamps);
DECLARE_OP_FUNCTION(op_rename_externals);
DECLARE_OP_FUNCTION(op_sensors_pose);
DECLARE_OP_FUNCTION(op_undistort);
DECLARE_OP_FUNCTION(op_camera_params);
DECLARE_OP_FUNCTION(op_cut);
DECLARE_OP_FUNCTION(op_deexternalize);
DECLARE_OP_FUNCTION(op_describe);
DECLARE_OP_FUNCTION(op_export_gps_all);
DECLARE_OP_FUNCTION(op_export_gps_gas_kml);
DECLARE_OP_FUNCTION(op_export_gps_kml);
DECLARE_OP_FUNCTION(op_export_enose_txt);
DECLARE_OP_FUNCTION(op_export_gps_txt);
DECLARE_OP_FUNCTION(op_export_rawdaq_txt);
DECLARE_OP_FUNCTION(op_export_txt);
DECLARE_OP_FUNCTION(op_export_2d_scans_txt);
DECLARE_OP_FUNCTION(op_export_anemometer_txt);
DECLARE_OP_FUNCTION(op_export_imu_txt);
DECLARE_OP_FUNCTION(op_export_odometry_txt);
DECLARE_OP_FUNCTION(op_externalize);
DECLARE_OP_FUNCTION(op_generate_3d_pointclouds);
DECLARE_OP_FUNCTION(op_info);
DECLARE_OP_FUNCTION(op_keep_label);
DECLARE_OP_FUNCTION(op_list_images);
DECLARE_OP_FUNCTION(op_list_poses);
DECLARE_OP_FUNCTION(op_list_rangebearing);
DECLARE_OP_FUNCTION(op_list_timestamps);
DECLARE_OP_FUNCTION(op_recalc_odometry);
DECLARE_OP_FUNCTION(op_remap_timestamps);
DECLARE_OP_FUNCTION(op_remove_label);
DECLARE_OP_FUNCTION(op_rename_externals);
DECLARE_OP_FUNCTION(op_sensors_pose);
DECLARE_OP_FUNCTION(op_undistort);

bool isFlagSet(
    CLI::App& app,
    const std::string& arg_name
    );

template <typename T>
bool getArgValue(
    CLI::App& app,
    const std::string& arg_name,
    T& out_val
    );

template bool getArgValue(
    CLI::App& app,
    const std::string& arg_name,
    std::string& out_val
    );

template bool getArgValue(
    CLI::App& app,
    const std::string& arg_name,
    double& out_val
    );

template bool getArgValue(
    CLI::App& app,
    const std::string& arg_name,
    size_t& out_val
    );

template bool getArgValue(
    CLI::App& app,
    const std::string& arg_name,
    int& out_val
    );

TEST_F(
    RawlogEditCLITest,
    Help_PrintsUsage
    );

TEST_F(
    RawlogEditCLITest,
    Version_PrintsVersion
    );

TEST_F(
    RawlogEditCLITest,
    NoOperationSelected_Fails
    );

TEST_F(
    RawlogEditCLITest,
    TwoOperationsSelected_Fails
    );

TEST_F(
    RawlogEditCLITest,
    MissingInputFile_Fails
    );

TEST_F(
    RawlogEditCLITest,
    Info_TestRtkPath
    );

TEST_F(
    RawlogEditCLITest,
    Info_RotScan2DWithParseWarning
    );

TEST_F(
    RawlogEditCLITest,
    Describe_LocalizationDemo
    );

TEST_F(
    RawlogEditCLITest,
    ListTimestamps_TestRtkPath
    );

TEST_F(
    RawlogEditCLITest,
    ListPoses_TestRtkPath
    );

TEST_F(
    RawlogEditCLITest,
    ListImages_LocalizationDemo
    );

TEST_F(
    RawlogEditCLITest,
    ListRangeBearing_KfSlamDemo
    );

TEST_F(
    RawlogEditCLITest,
    Cut_NoArgs_Fails
    );

TEST_F(
    RawlogEditCLITest,
    Cut_FromToIndex_TestRtkPath
    );

TEST_F(
    RawlogEditCLITest,
    ExportTxt_TestRtkPath
    );

TEST_F(
    RawlogEditCLITest,
    Export2DScansTxt_EmptyLabel_Fails
    );

TEST_F(
    RawlogEditCLITest,
    ExportGpsAll_TestRtkPath
    );

TEST_F(
    RawlogEditCLITest,
    ExportGpsKml_TestRtkPath
    );

TEST_F(
    RawlogEditCLITest,
    ExportGpsGasKml_NoMatchingObservations
    );

TEST_F(
    RawlogEditCLITest,
    ExportImuTxt_NoMatchingObservations
    );

TEST_F(
    RawlogEditCLITest,
    ExportAnemometerTxt_NoMatchingObservations
    );

TEST_F(
    RawlogEditCLITest,
    ExportEnoseTxt_NoMatchingObservations
    );

TEST_F(
    RawlogEditCLITest,
    ExportRawDaqTxt_NoMatchingObservations
    );

TEST_F(
    RawlogEditCLITest,
    RemoveLabel_TestRtkPath
    );

TEST_F(
    RawlogEditCLITest,
    RemoveLabel_EmptyArg_Fails
    );

TEST_F(
    RawlogEditCLITest,
    KeepLabel_TestRtkPath
    );

TEST_F(
    RawlogEditCLITest,
    RemapTimestamps_TestRtkPath
    );

TEST_F(
    RawlogEditCLITest,
    RemapTimestamps_BadFormat_Fails
    );

TEST_F(
    RawlogEditCLITest,
    RenameExternals_NoExternalFiles
    );

TEST_F(
    RawlogEditCLITest,
    SensorsPose_TestRtkPath
    );

TEST_F(
    RawlogEditCLITest,
    SensorsPose_MissingFile_Fails
    );

TEST_F(
    RawlogEditCLITest,
    RecalcOdometry_MissingArgs_Fails
    );

TEST_F(
    RawlogEditCLITest,
    RecalcOdometry_NoOdometryEntries
    );

TEST_F(
    RawlogEditCLITest,
    CameraParams_BadFormat_Fails
    );

TEST_F(
    RawlogEditCLITest,
    CameraParams_MissingFile_Fails
    );

TEST_F(
    RawlogEditCLITest,
    Externalize_NoConvertibleObservations
    );

TEST_F(
    RawlogEditCLITest,
    DeExternalize_NoExternalReferences
    );

TEST_F(
    RawlogEditCLITest,
    GenerateThreeDPointClouds_NoMatchingObservations
    );

TEST_F(
    RawlogEditCLITest,
    Undistort_NoMatchingObservations
    );

TEST_F(
    RawlogEditCLITest,
    OutputOverwrite_RequiresFlag
    );

EXPECT_TRUE(mrpt::system::fileExists(ini_fil));
EXPECT_TRUE(mrpt::system::fileExists(video_fil));
app setMinLoggingLevel(mrpt::system::LVL_ERROR);

app initialize(
    argc,
    argv
    );

template <class SLAM_CLASS>
void generic_icp_slam_test(
    const std::string& ini_filename,
    const std::string& rawlog_filename,
    config_changer_t cfg_changer,
    post_tester_t post_tester
    );

TEST(
    ICP_SLAM_App,
    MapFromRawlog_PointMap
    );

TEST(
    ICP_SLAM_App,
    MapFromRawlog_Grid
    );

TEST(
    ICP_SLAM_App,
    MapFromRawlog_LM
    );

void generic_kf_slam_test(
    const std::string& ini_filename,
    const std::string& rawlog_filename,
    config_changer_t cfg_changer
    );

TEST(
    KFSLAMApp,
    EKF_SLAM_3D
    );

TEST(
    KFSLAMApp,
    EKF_SLAM_2D
    );

TEST(
    KFSLAMApp,
    EKF_SLAM_3D_data_assoc_JCBB_Maha
    );

TEST(
    KFSLAMApp,
    EKF_SLAM_3D_data_assoc_NN_Maha
    );

void generic_pf_test(
    const std::string& ini_filename,
    const std::string& rawlog_filename,
    const std::string& map_filename,
    config_changer_t cfg_changer,
    post_tester_t post_tester
    );

TEST(
    MonteCarloLocalization_Rawlog,
    RunForSampleDataset_2D
    );

TEST(
    MonteCarloLocalization_Rawlog,
    RunForSampleDataset_3D
    );

void generic_rbpf_slam_test(
    const std::string& ini_filename,
    const std::string& rawlog_filename,
    config_changer_t cfg_changer,
    post_tester_t post_tester
    );

TEST(
    RBPF_SLAM_App,
    MapFromRawlog_Lidar2D_optimal_sampling
    );

TEST(
    RBPF_SLAM_App,
    MapFromRawlog_Lidar2D_gridICP
    );

TEST(
    RBPF_SLAM_App,
    MapFromRawlog_Lidar2D_pointsICP
    );

TEST(
    RBPF_SLAM_App,
    MapFromRawlog_ROSLAM_MC
    );

TEST(
    RBPF_SLAM_App,
    MapFromRawlog_ROSLAM_SOG
    );

MRPT_FILL_ENUM_MEMBER(
    maps::CHeightGridMap2D::TMapRepresentation,
    mrSimpleAverage
    );

MRPT_FILL_ENUM_MEMBER(
    mrpt::maps::COccupancyGridMap2D,
    lmMeanInformation
    );

MRPT_FILL_ENUM_MEMBER(
    mrpt::maps::COccupancyGridMap2D,
    lmRayTracing
    );

MRPT_FILL_ENUM_MEMBER(
    mrpt::maps::COccupancyGridMap2D,
    lmConsensus
    );

MRPT_FILL_ENUM_MEMBER(
    mrpt::maps::COccupancyGridMap2D,
    lmCellsDifference
    );

MRPT_FILL_ENUM_MEMBER(
    mrpt::maps::COccupancyGridMap2D,
    lmLikelihoodField_Thrun
    );

MRPT_FILL_ENUM_MEMBER(
    mrpt::maps::COccupancyGridMap2D,
    lmLikelihoodField_II
    );

MRPT_FILL_ENUM_MEMBER(
    mrpt::maps::COccupancyGridMap2D,
    lmConsensusOWA
    );

MRPT_FILL_ENUM_MEMBER(
    mrpt::maps::COccupancyGridMap3D,
    lmRayTracing
    );

MRPT_FILL_ENUM_MEMBER(
    mrpt::maps::COccupancyGridMap3D,
    lmLikelihoodField_Thrun
    );

MRPT_FILL_ENUM_MEMBER(
    mrpt::maps::CRandomFieldGridMap2D::TMapRepresentation,
    mrKernelDM
    );

MRPT_FILL_ENUM_MEMBER(
    mrpt::maps::CRandomFieldGridMap2D::TMapRepresentation,
    mrKalmanFilter
    );

MRPT_FILL_ENUM_MEMBER(
    mrpt::maps::CRandomFieldGridMap2D::TMapRepresentation,
    mrKalmanApproximate
    );

MRPT_FILL_ENUM_MEMBER(
    mrpt::maps::CRandomFieldGridMap2D::TMapRepresentation,
    mrKernelDMV
    );

MRPT_FILL_ENUM_MEMBER(
    mrpt::maps::CRandomFieldGridMap2D::TMapRepresentation,
    mrGMRF_SD
    );

PYBIND11_MODULE(
    _bindings,
    m
    );

static void func_laserSimul_callback(
    const mrpt::math::CVectorFixedDouble<3>& x_pose,
    const TFunctorLaserSimulData& fixed_param,
    mrpt::math::CVectorDouble& y_scanRanges
    );

void internal_build_points_map_from_scan2D(
    const mrpt::obs::CObservation2DRangeScan& obs,
    mrpt::maps::CMetricMap::Ptr& out_map,
    const void* insertOps
    );

IMPLEMENTS_SERIALIZABLE(
    CObservationPointCloud,
    CObservation,
    mrpt::obs
    );

static CBeacon makeGaussianBeacon(
    mrpt::maps::CBeacon::TBeaconID id,
    double x,
    double y,
    double z
    );

TEST(
    CBeaconMap,
    EmptyOnConstruction
    );

TEST(
    CBeaconMap,
    PushBackAndAccess
    );

TEST(
    CBeaconMap,
    MutableAccess
    );

TEST(
    CBeaconMap,
    IteratorAccess
    );

TEST(
    CBeaconMap,
    Clear
    );

TEST(
    CBeaconMap,
    Resize
    );

TEST(
    CBeaconMap,
    SerializeRoundTrip
    );

TEST(
    CBeaconMap,
    ChangeCoordinatesReference
    );

TEST(
    CBeaconMap,
    SaveToMATLABScript
    );

static void test_CGasConcentrationGridMap2D_insertAndRead(
    mrpt::maps::CRandomFieldGridMap2D::TMapRepresentation mapType,
    const double resolution,
    const std::function<double(const mrpt::maps::TRandomFieldCell&)>& cellToValue
    );

TEST(
    CGasConcentrationGridMap2D,
    insertAndRead
    );

static CGenericPointsMap makeTestMap();

TEST(
    CGenericPointsMap,
    FieldKeysValidAfterCreatingThreadExits
    );

TEST(
    CGenericPointsMap,
    DeserializeOnDifferentThread
    );

TEST(
    CGenericPointsMap,
    CopyAssignAcrossThreads
    );

TEST(
    CGenericPointsMap,
    ReserveFieldUnregisteredFieldThrows
    );

TEST(
    CGenericPointsMap,
    ResizeFieldUnregisteredFieldThrows
    );

TEST(
    CGenericPointsMap,
    AllFieldsSelfRoundTrip
    );

TEST(
    CGenericPointsMap,
    CopyPreservesFieldOrder
    );

TEST(
    CGenericPointsMap,
    SerializeDeserializePreservesFieldOrder
    );

TEST(
    CGenericPointsMap,
    RegisterAndAccessAllTypes
    );

TEST(
    CGenericPointsMap,
    UnregisterFieldRemovesData
    );

TEST(
    CGenericPointsMap,
    ClearAndReuse
    );

TEST(
    CGenericPointsMap,
    ConcurrentCreateDestroy
    );

TEST(
    CGenericPointsMap,
    ProduceOnThreadsConsumeOnMain
    );

TEST(
    CGenericPointsMap,
    SubstringFieldNames
    );

template <class MAP>
void do_test_insertCheckMapBounds();

TEST(
    CHeightGridMap2Ds,
    insertCheckMapBounds
    );

template <class MAP>
void do_test_insertPointsAndRead();

TEST(
    CHeightGridMap2Ds,
    insertPointsAndRead
    );

template <typename cell_t>
void test_monotonic();

TEST(
    CLogOddsGridMapLUT,
    monotonic_8bit
    );

TEST(
    CLogOddsGridMapLUT,
    monotonic_16bit
    );

TEST(
    CMultiMetricMapTests,
    isEmpty
    );

TEST(
    CMultiMetricMapTests,
    initializers
    );

TEST(
    CMultiMetricMapTests,
    copyCtorOp
    );

TEST(
    CMultiMetricMapTests,
    moveOp
    );

TEST(
    CMultiMetricMapTests,
    unknownMapType
    );

void fillSampleObs(
    mrpt::obs::CObservation3DRangeScan& obs,
    mrpt::obs::T3DPointsProjectionParams& pp,
    int test_case
    );

TEST(
    CObservation3DRangeScan,
    Project3D_noFilter
    );

TEST(
    CObservation3DRangeScan,
    Project3D_filterMinMax1
    );

TEST(
    CObservation3DRangeScan,
    Project3D_additionalLayers
    );

TEST(
    CObservation3DRangeScan,
    Project3D_filterMinMaxAllBetween
    );

TEST(
    CObservation3DRangeScan,
    Project3D_filterMinMaxNoneBetween
    );

TEST(
    CObservation3DRangeScan,
    Project3D_filterMin
    );

TEST(
    CObservation3DRangeScan,
    Project3D_filterMax
    );

TEST(
    CObservation3DRangeScan,
    LoadAndCheckFloorPoints
    );

TEST(
    CObservation3DRangeScan,
    SyntheticRange
    );

TEST(
    CObservation3DRangeScan,
    SyntheticDepth
    );

TEST(
    CObservationRotatingScan,
    fromVelodyne
    );

TEST(
    CObservationRotatingScan,
    from2DScan
    );

TEST_P(
    LikelihoodMethodTest,
    TruePoseAtLeastAsLikelyAsPerturbed
    );

INSTANTIATE_TEST_SUITE_P(
    AllMethods,
    LikelihoodMethodTest,
    ::testing::Values(COccupancyGridMap2D::lmMeanInformation, COccupancyGridMap2D::lmRayTracing, COccupancyGridMap2D::lmConsensus, COccupancyGridMap2D::lmCellsDifference, COccupancyGridMap2D::lmLikelihoodField_Thrun, COccupancyGridMap2D::lmLikelihoodField_II, COccupancyGridMap2D::lmConsensusOWA)
    );

TEST(
    COccupancyGridMap2DLikelihoodTests,
    LikelihoodFieldThrunMonotonicity
    );

TEST(
    COccupancyGridMap2DLikelihoodTests,
    LikelihoodFieldIIMonotonicity
    );

TEST(
    COccupancyGridMap2DMatchingTests,
    DetermineMatching2DExactCorrespondence
    );

TEST(
    COccupancyGridMap2DMatchingTests,
    DetermineMatching2DNoCorrespondenceWhenFarAway
    );

static COccupancyGridMap2D roundTrip(const COccupancyGridMap2D& src);

TEST(
    COccupancyGridMap2DSerializationTests,
    RoundTripEmpty
    );

TEST(
    COccupancyGridMap2DSerializationTests,
    RoundTripCells
    );

TEST(
    COccupancyGridMap2DSerializationTests,
    RoundTripInsertionOptions
    );

static std::string goldenBlobPath();

TEST(
    COccupancyGridMap2DSerializationTests,
    LegacyV6GoldenBlob
    );

TEST(
    COccupancyGridMap2DSerializationTests,
    GenerateV6GoldenBlob
    );

TEST(
    COccupancyGridMap2DSimulateTests,
    simulateScanRayHitsWall
    );

TEST(
    COccupancyGridMap2DSimulateTests,
    laserScanSimulatorWallDistance
    );

TEST(
    COccupancyGridMap2DSimulateTests,
    sonarSimulatorBasic
    );

TEST(
    COccupancyGridMap2DTests,
    insert2DScan
    );

TEST(
    COccupancyGridMap2DTests,
    NearestNeighborsCapable
    );

TEST(
    COccupancyGridMap2DTests,
    loadFromROSMapServerYAML
    );

TEST(
    COccupancyGridMap2DTests,
    setSizeRoundingAndLimits
    );

TEST(
    COccupancyGridMap2DTests,
    fillAndIsEmpty
    );

TEST(
    COccupancyGridMap2DTests,
    updateCellSaturation
    );

TEST(
    COccupancyGridMap2DTests,
    resizeGridGrowsKeepsContent
    );

TEST(
    COccupancyGridMap2DTests,
    subSampleHalvesResolution
    );

TEST(
    COccupancyGridMap2DTests,
    computeEntropyKnownMap
    );

TEST(
    COccupancyGridMap2DTests,
    getAsPointCloudBorders
    );

TEST(
    COccupancyGridMap2DTests,
    computePathCostFreeVsOccupied
    );

TEST(
    COccupancyGridMap2DTests,
    voronoiDiagramSizing
    );

TEST(
    COccupancyGridMap2DTests,
    voronoiClearanceCorrectness
    );

TEST(
    COccupancyGridMap3DTests,
    insert2DScan
    );

TEST(
    COccupancyGridMap3DTests,
    NearestNeighborsCapable
    );

TEST(
    COccupancyGridMap3DTests,
    insertScan3D
    );

TEST(
    COctoMapTests,
    updateVoxels
    );

TEST(
    COctoMapTests,
    insert2DScan
    );

void run_pc_filter_test(
    const double map2_x_off,
    const double map2_tim_off,
    const size_t expected_m1_count,
    const size_t expected_m2_count
    );

TEST(
    CPointCloudFilterByDistance,
    noOutliers
    );

TEST(
    CPointCloudFilterByDistance,
    withOutliers
    );

TEST(
    CPointCloudFilterByDistance,
    tooOldMap
    );

TEST(
    CSimplePointsMapTests,
    insertPoints
    );

TEST(
    CSimplePointsMapTests,
    clipOutOfRangeInZ
    );

TEST(
    CSimplePointsMapTests,
    clipOutOfRange
    );

TEST(
    CSimplePointsMapTests,
    loadSaveStreams
    );

TEST(
    CGenericPointsMap,
    CustomFieldsLifecycle
    );

TEST(
    CGenericPointsMap,
    DeepCopy
    );

TEST(
    CGenericPointsMap,
    DirectVectorAccess
    );

TEST(
    CSimplePointsMapTests,
    RejectCustomFields
    );

TEST(
    CSimplePointsMapTests,
    insert2DScan
    );

TEST(
    CGenericPointsMapTests,
    insert2DScan
    );

TEST(
    CSimplePointsMapTests,
    kdTreeClosestPoint2D
    );

TEST(
    CSimplePointsMapTests,
    kdTreeClosestPoint3D
    );

TEST(
    CSimplePointsMapTests,
    kdTreeNClosestPoint2D
    );

TEST(
    CSimplePointsMapTests,
    kdTreeRadiusSearch2D
    );

TEST(
    CSimplePointsMapTests,
    nn_single_search_2D
    );

TEST(
    CSimplePointsMapTests,
    nn_single_search_3D
    );

TEST(
    CSimplePointsMapTests,
    nn_multiple_search_2D
    );

TEST(
    CSimplePointsMapTests,
    nn_radius_search_3D
    );

TEST(
    CRandomFieldGridMap3D,
    insertCheckMapBounds
    );

TEST(
    CRandomFieldGridMap3D,
    insertPointsAndRead
    );

TEST(
    CReflectivityGridMap2D,
    ConstructionAndGridSize
    );

TEST(
    CReflectivityGridMap2D,
    AsString
    );

TEST(
    CReflectivityGridMap2D,
    Cell2Float
    );

TEST(
    CReflectivityGridMap2D,
    InsertObservation
    );

TEST(
    CReflectivityGridMap2D,
    ClearResetsToNeutral
    );

TEST(
    CReflectivityGridMap2D,
    GetAsImage
    );

TEST(
    CReflectivityGridMap2D,
    SerializeRoundTrip
    );

TEST(
    CReflectivityGridMap2D,
    SaveRepresentation
    );

TEST(
    CVoxelMap,
    EmptyOnConstruction
    );

TEST(
    CVoxelMap,
    UpdateAndQueryOccupancy
    );

TEST(
    CVoxelMap,
    MarkFreeVoxel
    );

TEST(
    CVoxelMap,
    QueryUnknownVoxel
    );

TEST(
    CVoxelMap,
    GetOccupiedVoxels
    );

TEST(
    CVoxelMap,
    Clear
    );

TEST(
    CVoxelMap,
    SerializeRoundTrip
    );

TEST(
    CVoxelMap,
    InsertPointCloudAsEndPoints
    );

TEST(
    CVoxelMapRGB,
    EmptyOnConstruction
    );

TEST(
    CVoxelMapRGB,
    UpdateAndClear
    );

TEST(
    SerializeTestMaps,
    WriteReadToMem
    );

TEST(
    SerializeTestOpenGL,
    WriteReadToMem
    );

TEST(
    SerializeTestOpenGL,
    PredefinedSceneFile
    );

PYBIND11_MODULE(
    _bindings,
    m
    );

DO_MATFIXED_INSTANTIATION(float);
DO_MATFIXED_INSTANTIATION(double);
DO_VECFIXED_INSTANTIATION(float);
DO_VECFIXED_INSTANTIATION(double);

template <class T2D, class U2D, class T3D, class U3D>
bool intersectInCommonPlane(
    const T3D& o1,
    const U3D& o2,
    const mrpt::math::TPlane& p,
    mrpt::math::TObject3D& obj
    );

bool intersectInCommonLine(
    const mrpt::math::TSegment3D& s1,
    const mrpt::math::TSegment3D& s2,
    const mrpt::math::TLine3D& lin,
    mrpt::math::TObject3D& obj
    );

bool intersectInCommonLine(
    const TSegment2D& s1,
    const TSegment2D& s2,
    const TLine2D& lin,
    TObject2D& obj
    );

void unsafeProjectPoint(
    const TPoint3D& point,
    const TPose3D& pose,
    TPoint2D& newPoint
    );

bool intersect(
    const TPolygonWithPlane& p1,
    const TLine3D& l2,
    double& d,
    double bestKnown
    );

bool intersect(
    const TPolygonWithPlane& p1,
    const TPolygonWithPlane& p2,
    TObject3D& obj
    );

bool intersect(
    const TSegmentWithLine& s1,
    const TSegmentWithLine& s2,
    TObject2D& obj
    );

void getSegmentsWithLine(
    const TPolygon2D& poly,
    vector<TSegmentWithLine>& segs
    );

bool intersectAux(
    const TPolygon3D& p1,
    const TPlane& pl1,
    const TPolygon3D& p2,
    const TPlane& pl2,
    TObject3D& obj
    );

bool compatibleBounds(
    const TPoint3D& min1,
    const TPoint3D& max1,
    const TPoint3D& min2,
    const TPoint3D& max2
    );

void getPlanes(
    const std::vector<TPolygon3D>& polys,
    std::vector<TPlane>& planes
    );

void getMinAndMaxBounds(
    const std::vector<TPolygon3D>& v1,
    std::vector<TPoint3D>& minP,
    std::vector<TPoint3D>& maxP
    );

void createPlaneFromPoseAndAxis(
    const TPose3D& pose,
    TPlane& plane,
    size_t axis
    );

template <class T>
size_t getIndexOfMin(
    const T& e1,
    const T& e2,
    const T& e3
    );

bool firstOrNonPresent(
    size_t i,
    const std::vector<MatchingVertex>& v
    );

bool depthFirstSearch(
    const CSparseMatrixTemplate<unsigned char>& mat,
    std::vector<std::vector<MatchingVertex>>& res,
    std::vector<bool>& used,
    size_t searching,
    unsigned char mask,
    std::vector<MatchingVertex>& current
    );

void depthFirstSearch(
    const CSparseMatrixTemplate<unsigned char>& mat,
    std::vector<std::vector<MatchingVertex>>& res,
    std::vector<bool>& used
    );

bool intersect(
    const TLine2D& l1,
    const TSegmentWithLine& s2,
    TObject2D& obj
    );

bool intersect(
    const TSegmentWithLine& s1,
    const TLine2D& l2,
    TObject2D& obj
    );

template <class T>
void noncentralChi2OneIteration(
    T arg,
    T& lans,
    T& dans,
    T& pans,
    unsigned int& j
    );

DO_MATFIXED_INSTANTIATION(double);
DO_MATFIXED_INSTANTIATION(float);
DO_MATFIXED_INSTANTIATION(double);
DO_MATFIXED_INSTANTIATION(float);
DO_MATFIXED_INSTANTIATION(float);
DO_MATFIXED_INSTANTIATION(double);
DO_VECFIXED_INSTANTIATION(float);
DO_VECFIXED_INSTANTIATION(double);

void CSqrt(
    double x,
    double y,
    double& a,
    double& b
    );

int SolveP4Bi(
    double* x,
    double b,
    double d
    );

static void dblSort3(
    double& a,
    double& b,
    double& c
    );

int SolveP4De(
    double* x,
    double b,
    double c,
    double d
    );

double N4Step(
    double x,
    double a,
    double b,
    double c,
    double d
    );

static double SolveP5_1(
    double a,
    double b,
    double c,
    double d,
    double e
    );

EXPLICIT_INST_ransac_detect_3D_planes(float);
EXPLICIT_INST_ransac_detect_3D_planes(double);
EXPLICIT_INSTANT_ransac_detect_2D_lines(float);
EXPLICIT_INSTANT_ransac_detect_2D_lines(double);
DO_MATFIXED_INSTANTIATION(double);
DO_MATFIXED_INSTANTIATION(float);
DO_MATFIXED_INSTANTIATION(double);

static void fromPoseAndAxis(
    const TPose3D& p,
    TLine3D& r,
    size_t axis
    );

double isLeft(
    const mrpt::math::TPoint2D& P0,
    const mrpt::math::TPoint2D& P1,
    const mrpt::math::TPoint2D& P2
    );

DO_MATFIXED_INSTANTIATION(double);
DO_MATFIXED_INSTANTIATION(float);

template <class LUT_CLASS>
void atan2_lut_test(
    const LUT_CLASS& atan2lut,
    const double SIZE,
    const double max_deg_errors,
    const double skip_area
    );

TEST(
    CAtan2LookUpTable,
    ValidValidTest
    );

TEST(
    CAtan2LookUpTable,
    MultiResTest
    );

TEST(
    LevMarq,
    optimizeTest
    );

TEST(
    CMatrixDynamic,
    GetSetEigen
    );

TEST(
    CMatrixDynamic,
    asString
    );

TEST(
    CMatrixDynamic,
    CtorFromArray
    );

TEST(
    CMatrixDynamic,
    Resizes
    );

TEST(
    CVectorDynamic,
    segment
    );

TEST(
    CMatrixFixed,
    CtorUninit
    );

TEST(
    CMatrixFixed,
    CtorAllZeros
    );

TEST(
    CMatrixFixed,
    Identity
    );

TEST(
    CMatrixFixed,
    asString
    );

TEST(
    CMatrixFixed,
    GetSetEigen
    );

TEST(
    CVectorDouble,
    resize
    );

TEST(
    ops_containers,
    ncc_vector
    );

TEST(
    ops_containers,
    xcorr
    );

TEST(
    distributions,
    normalPDF_1d
    );

TEST(
    distributions,
    normalPDF_vector
    );

TEST(
    distributions,
    erfc
    );

TEST(
    distributions,
    erf
    );

TEST(
    distributions,
    normalCDF
    );

TEST(
    distributions,
    chi2inv
    );

TEST(
    distributions,
    chi2PDF
    );

TEST(
    distributions,
    noncentralChi2PDF_CDF
    );

TEST(
    data_utils,
    mahalanobisDistanceSqAndLogPDF
    );

TEST(
    EigenAlignment,
    PrintAlignment
    );

template <unsigned int INTER_SPACE>
void checkAlignedFoo(
    const Foo<INTER_SPACE>& d,
    const std::string& testName
    );

template <unsigned int INTER_SPACE>
void do_test_AlignedMemOnStack();

template <unsigned int INTER_SPACE>
void do_test_AlignedMemOnStackUpTo();

template <unsigned int INTER_SPACE>
void do_test_AlignedMemInSTL();

template <unsigned int INTER_SPACE>
void do_test_AlignedMemInSTLUpTo();

TEST(
    EigenAlignment,
    AlignedMemOnStack
    );

TEST(
    EigenAlignment,
    AlignedMemInSTL
    );

TEST(
    Fourier,
    fft_real_pure_sine
    );

TEST(
    Fourier,
    fft_real_dc
    );

TEST(
    Fourier,
    dft2_real_roundtrip
    );

TEST(
    Fourier,
    dft2_complex_roundtrip_pow2
    );

TEST(
    Fourier,
    dft2_complex_roundtrip_nonpow2
    );

TEST(
    Fourier,
    cross_correlation_FFT_autocorr_peak
    );

TEST(
    fresnel,
    fresnelc
    );

TEST(
    fresnel,
    fresnels
    );

TEST(
    Geometry,
    Line2DIntersect
    );

TEST(
    Geometry,
    Line2DAngle
    );

TEST(
    Geometry,
    Line3DAngle
    );

TEST(
    Geometry,
    PlaneAngle
    );

TEST(
    Geometry,
    PlaneLineAngle
    );

TEST(
    Geometry,
    PlanePointDistance
    );

TEST(
    Geometry,
    PlanePointSignedDistance
    );

TEST(
    Geometry,
    Line3DDistance
    );

TEST(
    Geometry,
    Line3DDclosestPointTo
    );

TEST(
    Geometry,
    Segment2DIntersect
    );

TEST(
    Geometry,
    Intersection3D
    );

TEST(
    Geometry,
    IntersectionPlanePlane
    );

void myTestPolygonContainsPoint(
    std::vector<TPoint2D>& vs,
    bool convex
    );

TEST(
    Geometry,
    PolygonConvexContainsPoint
    );

TEST(
    Geometry,
    PolygonConcaveContainsPoint
    );

TEST(
    Geometry,
    changeEpsilon
    );

TEST(
    Geometry,
    conformAPlane
    );

TEST(
    Geometry,
    RectanglesIntersection
    );

TEST(
    TLine2D,
    asString
    );

TEST(
    TLine3D,
    asString
    );

TEST(
    TPlane,
    asString
    );

TEST(
    Geometry,
    closestFromPointToSegment
    );

TEST(
    Geometry,
    closestFromPointToLine
    );

TEST(
    Geometry,
    squaredDistancePointToLine
    );

TEST(
    TPolygon2D,
    toFromYAML
    );

TEST(
    TPolygon3D,
    toFromYAML
    );

TEST(
    Geometry,
    polygonIntersection
    );

TEST(
    Geometry,
    areAligned_TPoint2D
    );

TEST(
    Geometry,
    areAligned_TPoint3D
    );

TEST(
    Geometry,
    project2D
    );

TEST(
    Geometry,
    project3D
    );

TEST(
    Geometry,
    getRegressionLine2D
    );

TEST(
    Geometry,
    getRegressionLine3D
    );

TEST(
    Geometry,
    getRegressionPlane
    );

TEST(
    Geometry,
    FromPoseX_3D
    );

TEST(
    Geometry,
    FromPoseY_3D
    );

TEST(
    Geometry,
    FromPoseZ_3D
    );

TEST(
    Geometry,
    FromPoseX_2D
    );

TEST(
    Geometry,
    FromPoseY_2D
    );

TEST(
    Geometry,
    FromPoseDirection_3D
    );

TEST(
    Geometry,
    FromPoseDirection_2D
    );

TEST(
    Geometry,
    createPlaneFromPoseXY
    );

TEST(
    Geometry,
    createPlaneFromPoseXZ
    );

TEST(
    Geometry,
    createPlaneFromPoseYZ
    );

TEST(
    Geometry,
    distance_point_point
    );

TEST(
    Geometry,
    distance_parallel_lines_2D
    );

TEST(
    Geometry,
    distance_intersecting_lines_2D
    );

TEST(
    Geometry,
    distance_parallel_planes
    );

TEST(
    Geometry,
    distance_intersecting_planes
    );

TEST(
    Geometry,
    distance_parallel_lines_3D
    );

TEST(
    Geometry,
    areAligned_2D_with_line_output
    );

TEST(
    Geometry,
    areAligned_3D_with_line_output
    );

TEST(
    Geometry,
    intersect_segment3D_plane
    );

TEST(
    Geometry,
    intersect_segment3D_plane_no_crossing
    );

TEST(
    Geometry,
    intersect_plane_line3D
    );

TEST(
    Geometry,
    intersect_line3D_line3D_crossing
    );

TEST(
    Geometry,
    intersect_line3D_line3D_skew
    );

TEST(
    Geometry,
    intersect_polygon2D_segment
    );

TEST(
    Geometry,
    intersect_polygon2D_line
    );

TEST(
    Geometry,
    project3D_line
    );

TEST(
    Geometry,
    project3D_plane
    );

TEST(
    Geometry,
    signedArea_CCW_positive
    );

TEST(
    Geometry,
    signedArea_CW_negative
    );

TEST(
    Geometry,
    signedArea_triangle
    );

TEST(
    KDTreeCapable,
    closestPoint2D
    );

TEST(
    KDTreeCapable,
    closestPoint2D_nearBoundary
    );

TEST(
    KDTreeCapable,
    nClosestPoint2D
    );

TEST(
    KDTreeCapable,
    closestPoint3D
    );

TEST(
    KDTreeCapable,
    radiusSearch2D
    );

TEST(
    Matrices,
    DynMat_size
    );

TEST(
    Matrices,
    A_times_B_dyn
    );

TEST(
    Matrices,
    A_times_B_fix
    );

TEST(
    Matrices,
    EigenVal2x2dyn
    );

TEST(
    Matrices,
    eig_symmetric
    );

TEST(
    Matrices,
    EigenVal3x3dyn
    );

TEST(
    Matrices,
    EigenVal2x2fix
    );

TEST(
    Matrices,
    EigenVal3x3fix
    );

TEST(
    Matrices,
    inv_4x4_fix
    );

TEST(
    Matrices,
    inv_LLt_4x4_fix
    );

TEST(
    Matrices,
    inv_6x6_fix
    );

TEST(
    Matrices,
    inv_6x6_dyn
    );

TEST(
    Matrices,
    transpose
    );

TEST(
    Matrices,
    multiply_A_skew3
    );

TEST(
    Matrices,
    multiply_skew3_A
    );

TEST(
    Matrices,
    fromMatlabStringFormat
    );

TEST(
    Matrices,
    HCHt_3x2_2x2_2x3
    );

TEST(
    Matrices,
    HCHt_scalar_1x2_2x2_2x1
    );

TEST(
    Matrices,
    det_2x2_dyn
    );

TEST(
    Matrices,
    det_2x2_fix
    );

TEST(
    Matrices,
    det_3x3_dyn
    );

TEST(
    Matrices,
    det_3x3_fix
    );

TEST(
    Matrices,
    det_4x4_dyn
    );

TEST(
    Matrices,
    det_4x4_fix
    );

TEST(
    Matrices,
    det_10x10_dyn
    );

TEST(
    Matrices,
    chol_2x2_dyn
    );

TEST(
    Matrices,
    chol_2x2_fix
    );

TEST(
    Matrices,
    chol_3x3_dyn
    );

TEST(
    Matrices,
    chol_3x3_fix
    );

TEST(
    Matrices,
    chol_10x10_dyn
    );

TEST(
    Matrices,
    meanAndStdColumns
    );

TEST(
    Matrices,
    meanAndStdAll
    );

TEST(
    Matrices,
    laplacian
    );

TEST(
    Matrices,
    loadFromTextFile
    );

TEST(
    Matrices,
    loadFromArray
    );

TEST(
    Matrices,
    CMatrixFixedNumeric_loadWithEigenMap
    );

TEST(
    Matrices,
    EigenMatrix_loadWithEigenMap
    );

TEST(
    Matrices,
    setSize
    );

TEST(
    Matrices,
    extractSubmatrixSymmetricalBlocks
    );

TEST(
    Matrices,
    extractSubmatrixSymmetrical
    );

TEST(
    Matrices,
    removeColumns
    );

TEST(
    Matrices,
    removeRows
    );

MRPT_TEST(
    MatrixYaml,
    FromToEigen
    );

MRPT_TEST(
    MatrixYaml,
    Vector
    );

TEST(
    poly_roots,
    solve_poly2
    );

TEST(
    poly_roots,
    solve_poly3
    );

TEST(
    poly_roots,
    solve_poly4
    );

TEST(
    RANSAC,
    FitLineWithOutliers
    );

TEST(
    RANSAC,
    NoModelFoundWithAllDegenerateData
    );

template <TRobustKernelType KERNEL_TYPE>
void tester_robust_kernel(
    const double table [][5],
    const size_t N
    );

TEST(
    RobustKernels,
    PlainLeastSquares
    );

TEST(
    RobustKernels,
    PseudoHuber
    );

TEST(
    SLERP_tests,
    correctShortestPath
    );

template <typename T>
void testDefaultCtor();

TEST(
    TBoundingBox,
    defaultCtor
    );

template <typename T>
void testFromCorners();

TEST(
    TBoundingBox,
    fromCorners
    );

template <typename T>
void testInvalidThrows();

TEST(
    TBoundingBox,
    invalidThrows
    );

template <typename T>
void testIntersections();

TEST(
    TBoundingBox,
    intersections
    );

TEST(
    TBoundingBox,
    compose
    );

TEST(
    TBoundingBox,
    inverseCompose
    );

TEST(
    TObject2D,
    EmptySerialization
    );

TEST(
    TObject2D,
    PointSerializationAndGenerate3D
    );

TEST(
    TObject2D,
    SegmentSerializationAndGenerate3D
    );

TEST(
    TObject2D,
    LineSerializationAndGenerate3D
    );

TEST(
    TObject2D,
    PolygonSerializationAndGenerate3D
    );

TEST(
    TObject2D,
    GetterHelpers
    );

TEST(
    TObject2D,
    DeserializeInvalidTypeIndexThrows
    );

TEST(
    TObject3D,
    EmptySerialization
    );

TEST(
    TObject3D,
    PointSerializationAndGenerate2D
    );

TEST(
    TObject3D,
    SegmentSerializationAndGenerate2D
    );

TEST(
    TObject3D,
    LineSerializationAndGenerate2D
    );

TEST(
    TObject3D,
    PolygonSerializationAndGenerate2D
    );

TEST(
    TObject3D,
    PlaneSerializationAndGenerate2DThrows
    );

TEST(
    TObject3D,
    GetterHelpers
    );

TEST(
    TOrientedBox,
    Constructor
    );

TEST(
    TOrientedBox,
    assign
    );

TEST(
    TOrientedBox,
    setters
    );

TEST(
    TOrientedBox,
    ComputeVertices
    );

TEST(
    TOrientedBox,
    getAxisAlignedBox
    );

TEST(
    LightGeomData,
    PragmaPack
    );

TEST(
    LightGeomData,
    ConstExprCtors
    );

TEST(
    LightGeomData,
    Conversions
    );

TEST(
    LightGeomData,
    Comparisons
    );

TEST(
    LightGeomData,
    Strings
    );

TEST(
    TTwist3D,
    ComponentAccess
    );

TEST(
    TTwist3D,
    EqualityOperators
    );

TEST(
    TTwist3D,
    ScaleOperator
    );

TEST(
    TTwist3D,
    VectorConversions
    );

TEST(
    TTwist3D,
    AsStringAndFromString
    );

TEST(
    TTwist3D,
    RotateIdentity
    );

TEST(
    TTwist3D,
    RotateYaw90
    );

TEST(
    TTwist3D,
    Serialization
    );

TEST(
    Wrap2PI_tests,
    angDistance
    );

MRPT_FILL_ENUM_MEMBER(
    CHolonomicND::TSituations,
    TARGET_DIRECTLY
    );

MRPT_FILL_ENUM_MEMBER(
    CHolonomicND::TSituations,
    SMALL_GAP
    );

MRPT_FILL_ENUM_MEMBER(
    CHolonomicND::TSituations,
    WIDE_GAP
    );

MRPT_FILL_ENUM_MEMBER(
    CHolonomicND::TSituations,
    NO_WAY_FOUND
    );

MRPT_FILL_ENUM_MEMBER(
    CAbstractNavigator::TState,
    IDLE
    );

MRPT_FILL_ENUM_MEMBER(
    CAbstractNavigator::TState,
    NAVIGATING
    );

MRPT_FILL_ENUM_MEMBER(
    CAbstractNavigator::TState,
    SUSPENDED
    );

MRPT_FILL_ENUM_MEMBER(
    CAbstractNavigator::TState,
    NAV_ERROR
    );

PYBIND11_MODULE(
    _bindings,
    m
    );

static std::pair<std::vector<TGap>, std::size_t> findScoreGaps(const std::vector<double>& overall_scores);

static CHolonomicND::TGapArray buildRawGaps(
    const std::vector<double>& obstacles,
    const mrpt::math::TPose2D& target,
    double overall_max_dist,
    int GAPS_MIN_WIDTH
    );

static CHolonomicND::TGapArray filterGaps(
    const CHolonomicND::TGapArray& gaps,
    double max_depth,
    double GAPS_MAX_RELATIVE_DEPTH
    );

static std::vector<cell_t> initObstacleGrid(
    const COccupancyGridMap2D& theMap,
    const TPoint2D& origin,
    const TPoint2D& target,
    float occupancyThreshold,
    float robotRadius
    );

static bool reconstructPath(
    const std::vector<cell_t>& grid,
    int size_x,
    int passCellFound_x,
    int passCellFound_y,
    const TPoint2D& origin,
    const TPoint2D& target,
    const COccupancyGridMap2D& theMap,
    double minStepInReturnedPath,
    float maxSearchPathLength,
    std::deque<TPoint2D>& path
    );

IMPLEMENTS_MRPT_OBJECT(
    CMultiObjMotionOpt_Scalarization,
    CMultiObjectiveMotionOptimizerBase,
    mrpt::nav
    );

static double calc_trans_distance_t_below_Tramp_abc_numeric(
    double T,
    double a,
    double b,
    double c
    );

TEST(
    NavTests,
    Serialization_WriteReadToMem
    );

TEST(
    SerializeTestObs,
    WriteReadToOctectVectors
    );

TEST(
    NavTests,
    NavLogLoadFromTestFile
    );

static CAbstractHolonomicReactiveMethod::NavInput makeNavInput(
    size_t nDirs,
    double target_angle_rad,
    double target_dist = 0.5
    );

static double wrapAngle(double a);

TEST_F(
    HolonomicVFFTest,
    navigate_toward_target_ahead
    );

TEST_F(
    HolonomicVFFTest,
    navigate_toward_target_left
    );

TEST_F(
    HolonomicVFFTest,
    navigate_toward_target_right
    );

TEST_F(
    HolonomicVFFTest,
    speed_within_bounds
    );

TEST_F(
    HolonomicVFFTest,
    slow_down_near_target
    );

TEST_F(
    HolonomicVFFTest,
    all_obstacles_present_reduces_speed
    );

TEST_F(
    HolonomicNDTest,
    navigate_toward_target_ahead
    );

TEST_F(
    HolonomicNDTest,
    navigate_toward_target_left
    );

TEST_F(
    HolonomicNDTest,
    speed_within_bounds
    );

TEST_F(
    HolonomicNDTest,
    blocked_target_direction_detours
    );

TEST_F(
    HolonomicFullEvalTest,
    navigate_toward_target_ahead
    );

TEST_F(
    HolonomicFullEvalTest,
    navigate_toward_target_left
    );

TEST_F(
    HolonomicFullEvalTest,
    navigate_toward_target_diagonal
    );

TEST_F(
    HolonomicFullEvalTest,
    speed_within_bounds
    );

TEST_F(
    HolonomicFullEvalTest,
    repeated_calls_do_not_crash
    );

TEST(
    ClearanceDiagram,
    default_constructed_is_empty
    );

TEST(
    ClearanceDiagram,
    resize_sets_path_counts
    );

TEST(
    ClearanceDiagram,
    clear_resets_to_empty
    );

TEST(
    ClearanceDiagram,
    resize_twice_updates_counts
    );

static mrpt::nav::CMultiObjMotionOpt_Scalarization makeSimpleOptimizer(const std::string& scalar_formula = "s");

static mrpt::nav::TCandidateMovementPTG makeCandidate(
    double quality,
    double speed = 1.0
    );

TEST(
    MultiObjOptScalarization,
    selects_highest_score
    );

TEST(
    MultiObjOptScalarization,
    returns_nullopt_when_all_infeasible
    );

TEST(
    MultiObjOptScalarization,
    returns_nullopt_for_empty_input
    );

TEST(
    MultiObjOptScalarization,
    ignores_infeasible_candidates
    );

TEST(
    MultiObjOptScalarization,
    final_evaluation_has_correct_size
    );

TEST(
    MultiObjOptScalarization,
    combined_score_formula
    );

TEST(
    NavTests,
    NavGeomUtils_collision_straight_circ_robot
    );

TEST(
    PlannerSimple2D,
    findPath
    );

TEST(
    NavTests,
    PTGs_tests
    );

template <typename RNAVCLASS>
void run_rnav_test_impl(
    const std::string& sFilename,
    const std::string& sHoloMethod,
    const TPoint2D& nav_target,
    const TPoint2D& world_topleft,
    const TPoint2D& world_rightbottom,
    const TPoint2D& block_obstacle_topleft = TPoint2D(0, 0),
    const TPoint2D& block_obstacle_rightbottom = TPoint2D(0, 0)
    );

template <typename RNAVCLASS>
void run_rnav_test(
    const std::string& sFilename,
    const std::string& sHoloMethod,
    const TPoint2D& nav_target,
    const TPoint2D& world_topleft,
    const TPoint2D& world_rightbottom,
    const TPoint2D& block_obstacle_topleft = TPoint2D(0, 0),
    const TPoint2D& block_obstacle_rightbottom = TPoint2D(0, 0)
    );

const TPoint2D no_obs_trg(
    2. 0,
    0. 4
    );

const TPoint2D no_obs_topleft(
    - 10,
    10
    );

const TPoint2D no_obs_bottomright(
    10,
    - 10
    );

const TPoint2D with_obs_trg(
    9. 0,
    4. 0
    );

const TPoint2D with_obs_topleft(
    - 10,
    10
    );

const TPoint2D with_obs_bottomright(
    30,
    - 10
    );

const TPoint2D obs_tl(
    4. 0,
    2. 0
    );

const TPoint2D obs_br(
    5. 0,
    -2. 0
    );

TEST(
    CReactiveNavigationSystem,
    no_obstacle_nav_VFF
    );

TEST(
    CReactiveNavigationSystem,
    no_obstacle_nav_ND
    );

TEST(
    CReactiveNavigationSystem,
    no_obstacle_nav_FullEval
    );

TEST(
    CReactiveNavigationSystem3D,
    no_obstacle_nav_VFF
    );

TEST(
    CReactiveNavigationSystem3D,
    no_obstacle_nav_ND
    );

TEST(
    CReactiveNavigationSystem3D,
    no_obstacle_nav_FullEval
    );

TEST(
    CReactiveNavigationSystem,
    with_obstacle_nav_VFF
    );

TEST(
    CReactiveNavigationSystem,
    with_obstacle_nav_ND
    );

TEST(
    CReactiveNavigationSystem,
    with_obstacle_nav_FullEval
    );

TEST(
    CReactiveNavigationSystem3D,
    with_obstacle_nav_VFF
    );

TEST(
    CReactiveNavigationSystem3D,
    with_obstacle_nav_ND
    );

TEST(
    CReactiveNavigationSystem3D,
    with_obstacle_nav_FullEval
    );

TEST(
    TWaypoint,
    default_constructed_is_invalid
    );

TEST(
    TWaypoint,
    valid_when_fields_set
    );

TEST(
    TWaypoint,
    optional_heading_unset_by_default
    );

TEST(
    TWaypoint,
    optional_heading_can_be_set
    );

TEST(
    TWaypoint,
    speed_ratio_defaults_to_one
    );

TEST(
    TWaypoint,
    allow_skip_defaults_to_true
    );

TEST(
    TWaypoint,
    getAsText_nonempty
    );

TEST(
    TWaypointSequence,
    default_constructed_is_empty
    );

TEST(
    TWaypointSequence,
    can_add_waypoints
    );

TEST(
    TWaypointSequence,
    clear_empties_sequence
    );

TEST(
    TWaypointSequence,
    getAsText_nonempty
    );

TEST(
    TWaypointStatus,
    default_not_reached
    );

TEST(
    TWaypointStatus,
    assign_from_base_copies_target
    );

static void setupRRTPlanner(mrpt::nav::PlannerRRT_SE2_TPS& planner);

TEST(
    PlannerRRTSE2TPS,
    initialize_does_not_throw
    );

TEST(
    PlannerRRTSE2TPS,
    solves_very_close_goal
    );

TEST(
    PlannerRRTSE2TPS,
    solves_nearby_goal_open_space
    );

TEST(
    PlannerRRTSE2TPS,
    result_tree_not_empty_after_solve
    );

TEST(
    CWaypointsNavigator,
    navigateWaypoints_sets_sequence
    );

TEST(
    CWaypointsNavigator,
    cancel_clears_active_navigation
    );

TEST(
    CWaypointsNavigator,
    getWaypointsAccessGuard_provides_mutable_access
    );

TEST(
    CWaypointsNavigator,
    navigationStep_does_not_crash_without_prior_navigate
    );

TEST(
    CNavigatorManualSequence,
    executes_programmed_command_at_correct_time
    );

TEST(
    CNavigatorManualSequence,
    does_not_fire_command_before_scheduled_time
    );

TEST(
    CNavigatorManualSequence,
    empty_orders_step_is_no_op
    );

MRPT_FILL_ENUM_MEMBER(
    mrpt::obs::CActionRobotMovement2D,
    emOdometry
    );

MRPT_FILL_ENUM_MEMBER(
    mrpt::obs::CActionRobotMovement2D,
    emScan2DMatching
    );

MRPT_FILL_ENUM_MEMBER(
    mrpt::obs::CActionRobotMovement2D,
    mmGaussian
    );

MRPT_FILL_ENUM_MEMBER(
    mrpt::obs::CActionRobotMovement2D,
    mmThrun
    );

MRPT_FILL_ENUM_MEMBER(
    mrpt::obs::CActionRobotMovement3D,
    mmGaussian
    );

MRPT_FILL_ENUM_MEMBER(
    mrpt::obs::CActionRobotMovement3D,
    mm6DOF
    );

MRPT_FILL_ENUM_MEMBER(
    mrpt::obs::CObservation3DRangeScan,
    CH_VISIBLE
    );

MRPT_FILL_ENUM_MEMBER(
    mrpt::obs::CObservation3DRangeScan,
    CH_IR
    );

MRPT_FILL_ENUM_MEMBER(
    mrpt::obs::GnssService,
    NONE
    );

MRPT_FILL_ENUM_MEMBER(
    mrpt::obs::GnssService,
    GPS
    );

MRPT_FILL_ENUM_MEMBER(
    mrpt::obs::GnssService,
    GLONASS
    );

MRPT_FILL_ENUM_MEMBER(
    mrpt::obs::GnssService,
    BEIDOU
    );

MRPT_FILL_ENUM_MEMBER(
    mrpt::obs::GnssService,
    GALILEO
    );

MRPT_FILL_ENUM_MEMBER(
    mrpt::obs::GnssFixType,
    UNKNOWN
    );

MRPT_FILL_ENUM_MEMBER(
    mrpt::obs::GnssFixType,
    NO_FIX
    );

MRPT_FILL_ENUM_MEMBER(
    mrpt::obs::GnssFixType,
    AUTONOMOUS
    );

MRPT_FILL_ENUM_MEMBER(
    mrpt::obs::GnssFixType,
    SBAS
    );

MRPT_FILL_ENUM_MEMBER(
    mrpt::obs::GnssFixType,
    GBAS
    );

MRPT_FILL_ENUM_MEMBER(
    mrpt::obs::GnssFixType,
    DGPS
    );

MRPT_FILL_ENUM_MEMBER(
    mrpt::obs::GnssFixType,
    RTK_FLOAT
    );

MRPT_FILL_ENUM_MEMBER(
    mrpt::obs::GnssFixType,
    RTK_FIXED
    );

MRPT_FILL_ENUM_MEMBER(
    mrpt::obs::GnssFixType,
    PPP
    );

MRPT_FILL_ENUM_MEMBER(
    mrpt::obs::GnssFixType,
    DEAD_RECKONING
    );

MRPT_FILL_ENUM_MEMBER(
    mrpt::obs::GnssFixType,
    SIMULATION
    );

PYBIND11_MODULE(
    _bindings,
    m
    );

bool operator == (
    const LUT_info& a,
    const LUT_info& o
    );

void mempool_donate_range_matrix(CObservation3DRangeScan& obs);

bool TIMECONV_GetJulianDateFromGPSTime(
    const unsigned short gps_week,
    const double gps_tow,
    const unsigned int utc_offset,
    double* julian_date
    );

bool TIMECONV_IsALeapYear(const unsigned short year);

bool TIMECONV_GetNumberOfDaysInMonth(
    const unsigned short year,
    const unsigned char month,
    unsigned char* days_in_month
    );

bool TIMECONV_GetUTCTimeFromJulianDate(const double julian_date, mrpt::system::TTimeParts& utc);

TEST(
    CObservationIMU,
    Deserialize_v3
    );

TEST(
    CObservationIMU,
    Deserialize_v4
    );

TEST(
    Observations,
    WriteReadToMem
    );

TEST(
    Observations,
    WriteReadToOctectVectors
    );

template <class T>
void run_copy_tests();

TEST(
    Observations,
    CopyCtorAssignOp
    );

IMPLEMENTS_SERIALIZABLE(
    Foo,
    CSerializable,
    MyNS
    );

TEST(
    Serialization,
    CustomClassSerialize
    );

TEST(
    Serialization,
    ArchiveSharedPtrs
    );

TEST(
    Serialization,
    optionalObjects
    );

TEST(
    Serialization,
    enums
    );

TEST(
    CSimpleMap,
    ParseFileInFormat_v1_5
    );

PYBIND11_MODULE(
    _bindings,
    m
    );

static TPoint3Df toEyeSpace(const TPoint3Df& localPt, const CPose3D& objPose, const TRenderMatrices& state);
static bool isPointInFrustum(const TPoint3Df& eyePt, const TRenderMatrices& state);
static bool bboxIntersectsFrustum(const TBoundingBoxf& bbox, const CPose3D& objPose, const TRenderMatrices& state);
std::optional<texture_name_t> checkIfTextureAlreadyExists(const mrpt::img::CImage& rgb);

TEST(
    OpenGL,
    perspectiveMatrix
    );

TEST(
    OpenGL,
    orthoMatrix
    );

TEST(
    OpenGL,
    perspectiveMatrixFromPinhole
    );

TEST(
    OpenGL,
    TRenderMatrices_clipPlanes
    );

TEST(
    OpenGL,
    TRenderMatrices_orthographicNDC
    );

MRPT_FILL_ENUM_MEMBER(
    mrpt::poses,
    imSpline
    );

MRPT_FILL_ENUM_MEMBER(
    mrpt::poses,
    imLinear2Neig
    );

MRPT_FILL_ENUM_MEMBER(
    mrpt::poses,
    imLinear4Neig
    );

MRPT_FILL_ENUM_MEMBER(
    mrpt::poses,
    imSSLLLL
    );

MRPT_FILL_ENUM_MEMBER(
    mrpt::poses,
    imLinearSlerp
    );

MRPT_FILL_ENUM_MEMBER(
    mrpt::poses,
    imSplineSlerp
    );

template <class POSE_T>
void readFileWithPoses(
    const std::string& fname,
    std::vector<POSE_T>* poses_vec,
    std::vector<mrpt::system::TTimeStamp>* timestamps = NULL,
    bool substract_init_offset = false
    );

PYBIND11_MODULE(
    _bindings,
    m
    );

template <class MAT33, class MAT66>
void cov2to3(
    const MAT33& c2d,
    MAT66& c3d
    );

void aux_poseypr2posequat(
    const CVectorFixedDouble<6>& x,
    ] const double& dummy,
    CVectorFixedDouble<7>& y
    );

poses::CPosePDFGaussian operator + (
    const mrpt::poses::CPose2D& A,
    const mrpt::poses::CPosePDFGaussian& B
    );

poses::CPosePDFGaussianInf operator + (
    const mrpt::poses::CPose2D& A,
    const mrpt::poses::CPosePDFGaussianInf& B
    );

template <typename VEC3, typename MAT3x3, typename MAT3x9>
void M3x9(
    const VEC3& a,
    const MAT3x3& B,
    MAT3x9& RES
    );

TEST(
    CPoint,
    toFromString_2D
    );

TEST(
    CPoint,
    toFromString_3D
    );

TEST(
    CPose2DInterpolator,
    interp
    );

TEST_F(
    Pose3DTests,
    DefaultValues
    );

TEST_F(
    Pose3DTests,
    Initialization
    );

TEST_F(
    Pose3DTests,
    OperatorBracket
    );

TEST_F(
    Pose3DTests,
    InverseHM
    );

TEST_F(
    Pose3DTests,
    Compose
    );

TEST_F(
    Pose3DTests,
    composeFrom
    );

TEST_F(
    Pose3DTests,
    ToFromCPose2D
    );

TEST_F(
    Pose3DTests,
    ComposeAndInvComposeWithPoint
    );

TEST_F(
    Pose3DTests,
    ComposePointJacob
    );

TEST_F(
    Pose3DTests,
    ComposePointJacobApprox
    );

TEST_F(
    Pose3DTests,
    InvComposePointJacob
    );

TEST_F(
    Pose3DTests,
    ComposePointJacob_se3
    );

TEST_F(
    Pose3DTests,
    InvComposePointJacob_se3
    );

TEST_F(
    Pose3DTests,
    ExpLnEqual
    );

TEST_F(
    Pose3DTests,
    Jacob_dExpe_de_at_0
    );

TEST_F(
    Pose3DTests,
    Jacob_dLnT_dT
    );

TEST_F(
    Pose3DTests,
    Jacob_dexpeD_de
    );

TEST_F(
    Pose3DTests,
    Jacob_dDexpe_de
    );

TEST_F(
    Pose3DTests,
    Jacob_dAexpeD_de
    );

TEST_F(
    Pose3DTests,
    translation
    );

TEST(
    CPose3DInterpolator,
    interp
    );

TEST_F(
    Pose3DPDFGaussTests,
    ToQuatGaussPDFAndBack
    );

TEST_F(
    Pose3DPDFGaussTests,
    CompositionJacobian
    );

TEST_F(
    Pose3DPDFGaussTests,
    AllOperators
    );

TEST_F(
    Pose3DPDFGaussTests,
    ChangeCoordsRef
    );

TEST(
    CPose3DPDFGrid,
    uniformDistribution
    );

TEST(
    CPose3DPDFGrid,
    setManualPDF
    );

static void quat_vs_YPR(
    double yaw,
    double pitch,
    double roll,
    double qx,
    double qy,
    double qz,
    double qw,
    const std::string& sRotMat
    );

TEST(
    QuatTests,
    Quat_vs_YPR
    );

TEST_F(
    Pose3DQuatTests,
    FromYPRAndBack
    );

TEST_F(
    Pose3DQuatTests,
    UnaryInverse
    );

TEST_F(
    Pose3DQuatTests,
    CopyOperator
    );

TEST_F(
    Pose3DQuatTests,
    Compose
    );

TEST_F(
    Pose3DQuatTests,
    ComposeWithPoint
    );

TEST_F(
    Pose3DQuatTests,
    ComposeWithPointJacob
    );

TEST_F(
    Pose3DQuatTests,
    InvComposeWithPoint
    );

TEST_F(
    Pose3DQuatTests,
    InvComposeWithPointJacob
    );

TEST_F(
    Pose3DQuatTests,
    ComposeInvComposePoint
    );

TEST_F(
    Pose3DQuatTests,
    ComposePoint_vs_CPose3D
    );

TEST_F(
    Pose3DQuatTests,
    InvComposePoint_vs_CPose3D
    );

TEST_F(
    Pose3DQuatTests,
    SphericalCoordsJacobian
    );

TEST_F(
    Pose3DQuatTests,
    NormalizationJacobian
    );

TEST_F(
    Pose3DQuatPDFGaussTests,
    ToYPRGaussPDFAndBack
    );

TEST_F(
    Pose3DQuatPDFGaussTests,
    CompositionJacobian
    );

TEST_F(
    Pose3DQuatPDFGaussTests,
    Inverse
    );

TEST_F(
    Pose3DQuatPDFGaussTests,
    Composition
    );

TEST_F(
    Pose3DQuatPDFGaussTests,
    InverseComposition
    );

TEST_F(
    Pose3DQuatPDFGaussTests,
    RelativeDisplacement
    );

TEST_F(
    Pose3DQuatPDFGaussTests,
    ChangeCoordsRef
    );

TEST_F(
    PosePDFGaussTests,
    Inverse
    );

TEST(
    CPosePDFGrid,
    defaultCtor
    );

TEST(
    CPosePDFGrid,
    resize
    );

TEST(
    CPosePDFGrid,
    basicOps
    );

TEST_F(
    QuaternionTests,
    crossProduct
    );

TEST_F(
    QuaternionTests,
    gimbalLock
    );

TEST_F(
    QuaternionTests,
    ToYPRAndBack
    );

TEST_F(
    QuaternionTests,
    LnAndExpMatches
    );

TEST_F(
    QuaternionTests,
    ExpAndLnMatches
    );

TEST_F(
    QuaternionTests,
    ThrowOnNotNormalized
    );

TEST_F(
    QuaternionTests,
    ensurePositiveRealPart
    );

TEST(
    CRobot2DPoseEstimator,
    defaultCtor
    );

TEST(
    CRobot2DPoseEstimator,
    extrapolateRobotPose
    );

TEST(
    CRobot2DPoseEstimator,
    integrateOdometryAndLocalization
    );

template <int DIM>
void run_tf_test1(const mrpt::poses::CPose2D& A2B_);

TEST(
    FrameTransformer,
    SimplePublishAndLookup
    );

TEST_F(
    SE3_traits_tests,
    SE3_jacobs_DinvP1InvP2
    );

TEST_F(
    SE3_traits_tests,
    SE3_jacobs_dAB_dAB
    );

TEST_F(
    SE2_traits_tests,
    SE2_jacobs_DinvP1InvP2
    );

TEST_F(
    SE2_traits_tests,
    SE2_jacobs_dAB_dAB
    );

TEST(
    Matrices,
    SerializeCMatrixD
    );

TEST(
    CPose3DPDFGaussian,
    bayesianFusion
    );

TEST(
    CPose3DPDFGaussian,
    evaluatePDF
    );

TEST(
    CPose3DPDFGaussian,
    evaluateNormalizedPDF
    );

TEST(
    CPose3DPDFGaussianInf,
    bayesianFusion
    );

TEST(
    CPose3DPDFGaussianInf,
    evaluatePDF
    );

TEST(
    CPointPDFGaussian,
    bayesianFusion
    );

TEST(
    CPoint2DPDFGaussian,
    bayesianFusion
    );

TEST(
    CPose3DPDFSOG,
    drawSingleSample
    );

TEST(
    CPose3DPDFSOG,
    bayesianFusion
    );

TEST(
    CPosePDFSOG,
    drawSingleSample
    );

TEST(
    CPose3DPDFParticles,
    drawSingleSample
    );

TEST(
    CPose3DPDFParticles,
    operatorPlusEquals
    );

TEST(
    CPosePDFGrid,
    drawSingleSample
    );

TEST(
    CPointPDFParticles,
    drawSingleSample
    );

void run_test_so2_avrg(
    const double* angs,
    const size_t N,
    const double ang_correct_avr
    );

TEST(
    SE2_SE3_avrg,
    SO2_average
    );

void run_test_so3_avrg(
    const double* angs,
    const size_t N,
    const mrpt::math::CMatrixDouble33& correct_avr
    );

TEST(
    SE2_SE3_avrg,
    SO3_average
    );

PYBIND11_MODULE(
    _bindings,
    m
    );

uint32_t hiBit(const uint32_t u);
uint32_t loBit(const uint32_t u);
uint32_t loBits(const uint32_t u);

uint32_t mixBits(
    const uint32_t u,
    const uint32_t v
    );

uint32_t twist(
    const uint32_t m,
    const uint32_t s0,
    const uint32_t s1
    );

TEST(
    Random,
    Randomize
    );

TEST(
    Random,
    KnownSequence
    );

TEST(
    Random,
    portable_uniform_distribution
    );

TEST(
    Random,
    shuffle
    );

TEST(Random, PermuteVector);
TEST(Random, DrawUniformUnsignedIntRange);
TEST(Random, DrawUniformVector);
TEST(Random, GlobalHelpers);

PYBIND11_MODULE(
    _bindings,
    m
    );

void do_register();

TEST(
    rtti,
    CObject_CLASSID
    );

TEST(
    rtti,
    MyDerived1_CLASSID
    );

TEST(
    rtti,
    Factory
    );

TEST(
    rtti,
    CreateSmartPointerTypes
    );

TEST(
    rtti,
    CListOfClasses
    );

PYBIND11_MODULE(
    _bindings,
    m
    );

MRPT_FILL_ENUM(icpClassic);
MRPT_FILL_ENUM(icpLevenbergMarquardt);
MRPT_FILL_ENUM(icpCovLinealMSE);
MRPT_FILL_ENUM(icpCovFiniteDifferences);

MRPT_FILL_ENUM_MEMBER(
    mrpt::slam,
    smMETRIC_MAP_MATCHING
    );

MRPT_FILL_ENUM_MEMBER(
    mrpt::slam,
    smOBSERVATION_OVERLAP
    );

MRPT_FILL_ENUM_MEMBER(
    mrpt::slam,
    smCUSTOM_FUNCTION
    );

MRPT_FILL_ENUM(assocNN);
MRPT_FILL_ENUM(assocJCBB);
MRPT_FILL_ENUM(metricMaha);
MRPT_FILL_ENUM(metricML);

PYBIND11_MODULE(
    _bindings,
    m
    );

static double eval_similarity_metric_map_matching(
    const CIncrementalMapPartitioner* parent,
    const map_keyframe_t& kf1,
    const map_keyframe_t& kf2,
    const mrpt::poses::CPose3D& relPose2wrt1
    );

static double eval_similarity_observation_overlap(
    const map_keyframe_t& kf1,
    const map_keyframe_t& kf2,
    const mrpt::poses::CPose3D& relPose2wrt1
    );

TEST_F(
    ICPTests,
    AlignScans_icpClassic
    );

TEST_F(
    ICPTests,
    AlignScans_icpLevenbergMarquardt
    );

TEST_F(
    ICPTests,
    SyntheticICP3D
    );

TEST(
    CIncrementalMapPartitioner,
    test_dataset
    );

void run_test_pf_localization(
    CPose2D& meanPose,
    CMatrixDouble33& cov
    );

TEST(
    MonteCarlo2D,
    RunSampleDataset
    );

TEST(
    DataAssociation,
    TestNoICs
    );

TEST(
    TopographyReconstructPathFrom3RTK,
    sampleDataset
    );

bool ransac_data_assoc_run();

TEST(
    tfest,
    ransac_data_assoc
    );

MRPT_FILL_ENUM(LVL_DEBUG);
MRPT_FILL_ENUM(LVL_INFO);
MRPT_FILL_ENUM(LVL_WARN);
MRPT_FILL_ENUM(LVL_ERROR);

MRPT_FILL_ENUM_CUSTOM_NAME(
    LVL_DEBUG,
    "DEBUG"
    );

MRPT_FILL_ENUM_CUSTOM_NAME(
    LVL_INFO,
    "INFO"
    );

MRPT_FILL_ENUM_CUSTOM_NAME(
    LVL_WARN,
    "WARN"
    );

MRPT_FILL_ENUM_CUSTOM_NAME(
    LVL_ERROR,
    "ERROR"
    );

PYBIND11_MODULE(
    _bindings,
    m
    );

bool cmpFileEntriesName_Asc(
    const CDirectoryExplorer::TFileInfo& a,
    const CDirectoryExplorer::TFileInfo& b
    );

bool cmpFileEntriesName_Desc(
    const CDirectoryExplorer::TFileInfo& a,
    const CDirectoryExplorer::TFileInfo& b
    );

std::string aux_format_string_multilines(
    const std::string& s,
    size_t len
    );

std::string p2s(const fs::path& p);

std::ostream& operator << (
    std::ostream& out,
    MD5 md5
    );

template void mrpt::system::tokenize< std::deque< std::string > >(
    const std::string& inString,
    const std::string& inDelimiters,
    std::deque<std::string>& outTokens,
    bool skipBlankTokens
    );

template void mrpt::system::tokenize< std::vector< std::string > >(
    const std::string& inString,
    const std::string& inDelimiters,
    std::vector<std::string>& outTokens,
    bool skipBlankTokens
    );

TEST(
    Base64,
    RandomEncDec
    );

TEST_F(
    TempDirFixture,
    ExploreFilesAndDirectories
    );

TEST_F(
    TempDirFixture,
    ExploreFilesOnly
    );

TEST_F(
    TempDirFixture,
    SortByName
    );

TEST_F(
    TempDirFixture,
    FilterByExtension
    );

TEST(
    CDirectoryExplorer,
    ExploreNonExistingDirectoryThrows
    );

TEST(
    crc,
    crc32
    );

TEST(
    CTimeLogger,
    getLastTime
    );

TEST(
    CTimeLogger,
    getMeanTime
    );

TEST(
    CTimeLogger,
    printStats
    );

TEST(
    CTimeLogger,
    printStatsFaulty
    );

TEST(
    CTimeLogger,
    multithread
    );

TEST(
    DateTime,
    dateTimeVsClock
    );

TEST(
    DateTime,
    time_t_forth_back
    );

TEST(
    DateTime,
    fixed_date_check
    );

TEST(
    DateTime,
    double_to_from
    );

TEST(
    DateTime,
    timestampAdd
    );

TEST(
    FileSystem,
    fileNameChangeExtension
    );

TEST(
    FileSystem,
    extractFileExtension
    );

TEST(
    FileSystem,
    extractFileDirectory
    );

TEST(
    FileSystem,
    extractFileName
    );

TEST(
    FileSystem,
    filePathSeparatorsToNative
    );

TEST(
    FileSystem,
    toAbsolutePath
    );

TEST(
    FileSystem,
    pathJoin
    );

TEST(
    string_utils,
    firstNLines
    );

TEST(
    thread_name,
    set_get_current_thread
    );

static void testerThread(const std::string& myName);

TEST(
    thread_name,
    set_get_other_thread
    );

PYBIND11_MODULE(
    _bindings,
    m
    );

CPose3DQuat generate_points(
    TPoints& pA,
    TPoints& pB
    );

template <typename T>
void generate_list_of_points(
    const TPoints& pA,
    const TPoints& pB,
    TMatchingPairListTempl<T>& list
    );

void generate_vector_of_points(
    const TPoints& pA,
    const TPoints& pB,
    vector<mrpt::math::TPoint3D>& ptsA,
    vector<mrpt::math::TPoint3D>& ptsB
    );

template <typename T>
void se3_l2_MatchList_test();

TEST(
    tfest,
    se3_l2_MatchList_float
    );

TEST(
    tfest,
    se3_l2_MatchList_double
    );

TEST(
    tfest,
    se3_l2_PtsLists
    );

TEST(
    tfest,
    se3_l2_robust
    );

PYBIND11_MODULE(
    _bindings,
    m
    );

void do_test_geodetic_geocentric(const TGeodeticCoords c1);

TEST(
    TopographyConversion,
    GeodeticToGeocentricToGeodetic
    );

TEST(
    TopographyConversion,
    geodeticToENU_WGS84
    );

TEST(
    TopographyConversion,
    geodeticToUTM_WGS84
    );

TEST(
    TopographyConversion,
    UTMToGeodetic_WGS84
    );

MRPT_FILL_ENUM_MEMBER(
    TestColors,
    Black
    );

MRPT_FILL_ENUM_MEMBER(
    TestColors,
    Gray
    );

MRPT_FILL_ENUM_MEMBER(
    TestColors,
    White
    );

MRPT_FILL_ENUM(North);
MRPT_FILL_ENUM(East);
MRPT_FILL_ENUM(South);
MRPT_FILL_ENUM(West);

TEST(
    TEnumType,
    str2value
    );

TEST(
    TEnumType,
    value2str
    );

TEST(
    StaticString,
    ctor
    );

TEST(
    StaticString,
    concat_literals
    );

TEST(
    StaticString,
    concat_multi
    );

TEST(
    num_to_string,
    ctor
    );

DECLARE_CUSTOM_TTYPENAME(MyFooClass);
DECLARE_CUSTOM_TTYPENAME(MyNS::MyBarClass);

TEST(
    TTypeName,
    types2str
    );

TEST(
    TTypeName,
    types2str_shared_ptr
    );

TEST(
    TTypeName,
    types2stdstring
    );

constexpr int foo_i_below_10(unsigned i);

TEST(
    XAssert,
    build_time
    );

MRPT_FILL_ENUM_MEMBER(
    TCullFace,
    NONE
    );

MRPT_FILL_ENUM_MEMBER(
    TCullFace,
    BACK
    );

MRPT_FILL_ENUM_MEMBER(
    TCullFace,
    FRONT
    );

PYBIND11_MODULE(
    _bindings,
    m
    );

void aux_add3DpointWithEigenVectors(
    const double x,
    const double y,
    const double z,
    std::vector<mrpt::math::CMatrixFixed<float, 3, 1>>& pts,
    const mrpt::math::CMatrixFixed<double, 3, 3>& M,
    const mrpt::math::CMatrixFixed<double, 3, 1>& mean
    );

mrpt::math::TPolygonWithPlane createPolygonFromTriangle(const std::pair<mrpt::viz::TTriangle, CMesh::TTriangleVertexIndices>& p);

bool sort_voxels_z(
    const COctoMapVoxels::TVoxel& a,
    const COctoMapVoxels::TVoxel& b
    );

bool getVerticesAndFaces(
    const vector<math::TPolygon3D>& polys,
    vector<TPoint3D>& vertices,
    vector<CPolyhedron::TPolyhedronFace>& faces
    );

bool analyzeJohnsonPartsString(
    const std::string& components,
    uint32_t numBaseEdges,
    vector<JohnsonBodyPart>& parts
    );

size_t additionalVertices(
    JohnsonBodyPart j,
    uint32_t numBaseEdges
    );

void insertCupola(
    size_t numBaseEdges,
    double angleShift,
    double baseRadius,
    double edgeLength,
    bool isRotated,
    bool isUpwards,
    size_t base,
    vector<TPoint3D>& verts,
    vector<CPolyhedron::TPolyhedronFace>& faces
    );

void insertRotunda(
    double angleShift,
    double baseRadius,
    bool isRotated,
    bool isUpwards,
    size_t base,
    vector<TPoint3D>& verts,
    vector<CPolyhedron::TPolyhedronFace>& faces
    );

size_t additionalFaces(
    JohnsonBodyPart j,
    uint32_t numBaseEdges
    );

bool faceContainsEdge(
    const CPolyhedron::TPolyhedronFace& f,
    const CPolyhedron::TPolyhedronEdge& e
    );

bool getPlanesIntersection(
    const vector<const TPlane*>& planes,
    TPoint3D& pnt
    );

bool searchForFace(
    const vector<CPolyhedron::TPolyhedronFace>& fs,
    uint32_t v1,
    uint32_t v2,
    uint32_t v3
    );

bool searchForEdge(
    const vector<CPolyhedron::TPolyhedronEdge>& es,
    uint32_t v1,
    uint32_t v2,
    size_t& where
    );

bool searchForEdge(
    const vector<CPolyhedron::TPolyhedronFace>::const_iterator& begin,
    const vector<CPolyhedron::TPolyhedronFace>::const_iterator& end,
    uint32_t v1,
    uint32_t v2
    );

double getHeight(
    const TPolygon3D& p,
    const TPoint3D& c
    );

PlyElement* find_element(
    PlyFile* plyfile,
    const std::string& s
    );

PlyProperty* find_property(
    PlyElement* elem,
    const std::string& s,
    int* index
    );

void write_scalar_type(
    FILE* fp,
    PLY_DATA_TYPE code
    );

vector<string> get_words(
    FILE* fp,
    string& orig_line
    );

void write_binary_item(
    FILE* fp,
    int int_val,
    unsigned int uint_val,
    double double_val,
    int type
    );

void write_ascii_item(
    FILE* fp,
    int int_val,
    unsigned int uint_val,
    double double_val,
    int type
    );

void add_element(
    PlyFile* plyfile,
    const vector<string>& words
    );

void add_property(
    PlyFile* plyfile,
    const vector<string>& words
    );

void add_comment(
    PlyFile* plyfile,
    const string& line
    );

void add_obj_info(
    PlyFile* plyfile,
    const string& line
    );

void copy_property(
    PlyProperty* dest,
    const PlyProperty* src
    );

void store_item(
    char* item,
    int type,
    int int_val,
    unsigned int uint_val,
    double double_val
    );

void get_stored_item(
    void* ptr,
    int type,
    int* int_val,
    unsigned int* uint_val,
    double* double_val
    );

double get_item_value(
    const char*,
    int
    );

void get_ascii_item(
    const char* word,
    int type,
    int* int_val,
    unsigned int* uint_val,
    double* double_val
    );

int get_binary_item(
    FILE* fp,
    int bin_file_type,
    int type,
    int* int_val,
    unsigned int* uint_val,
    double* double_val
    );

void ascii_get_element(
    PlyFile* plyfile,
    char* elem_ptr
    );

void binary_get_element(
    PlyFile* plyfile,
    char* elem_ptr
    );

PlyFile* ply_write(
    FILE* fp,
    const vector<string>& elem_names,
    int file_type
    );

PlyFile* ply_open_for_writing(
    const char* name,
    const vector<string>& elem_names,
    int file_type,
    float* version
    );

void ply_describe_element(
    PlyFile* plyfile,
    const string& elem_name,
    int nelems,
    vector<PlyProperty>& prop_list
    );

void ply_describe_property(
    PlyFile* plyfile,
    const char* elem_name,
    const PlyProperty* prop
    );

void ply_element_count(
    PlyFile* plyfile,
    const string& elem_name,
    int nelems
    );

void ply_header_complete(PlyFile* plyfile);

void ply_put_element_setup(
    PlyFile* plyfile,
    const string& elem_name
    );

void ply_put_element(
    PlyFile* plyfile,
    void* elem_ptr
    );

void ply_put_comment(
    PlyFile* plyfile,
    const string& comment
    );

void ply_put_obj_info(
    PlyFile* plyfile,
    const string& obj_info
    );

PlyFile* ply_read(
    FILE* fp,
    vector<string>& elem_names
    );

PlyFile* ply_open_for_reading(
    const char* filename,
    vector<string>& elem_names,
    int* file_type,
    float* version
    );

vector<PlyProperty> ply_get_element_description(
    PlyFile* plyfile,
    const string& elem_name,
    int& nelems,
    int& nprops
    );

void ply_get_property(
    PlyFile* plyfile,
    const string& elem_name,
    const PlyProperty* prop
    );

void ply_get_element(
    PlyFile* plyfile,
    void* elem_ptr
    );

void ply_get_comments(
    PlyFile* plyfile,
    vector<string>& comments
    );

void ply_get_obj_info(
    PlyFile* plyfile,
    vector<string>& obj_info
    );

void ply_close(PlyFile* plyfile);

void ply_get_info(
    PlyFile* ply,
    float* version,
    int* file_type
    );

double get_item_value(
    char* item,
    int type
    );

PLY_DATA_TYPE get_prop_type(const string& type_name);

TEST(
    Serialization,
    bimap
    );

TEST(
    CFileGZStreams,
    readwriteTmpFileCompressed
    );

TEST(
    CFileGZStreams,
    compareWithTestGZFiles
    );

TEST_F(
    CCompressedStreamsTest,
    writeReadUncompressed
    );

TEST_F(
    CCompressedStreamsTest,
    writeReadGzip
    );

TEST_F(
    CCompressedStreamsTest,
    writeReadZstd
    );

TEST_F(
    CCompressedStreamsTest,
    autoDetection
    );

TEST_F(
    CCompressedStreamsTest,
    uncompressedSizeHint
    );

TEST_F(
    CCompressedStreamsTest,
    uncompressedPosition
    );

TEST_F(
    CCompressedStreamsTest,
    errorHandling
    );

TEST_F(
    CCompressedStreamsTest,
    largeDataGzip
    );

TEST_F(
    CCompressedStreamsTest,
    largeDataZstd
    );

TEST_F(
    CCompressedStreamsTest,
    compressionRatioTracking
    );

TEST_F(
    CCompressedStreamsTest,
    compressionRatioZstd
    );

TEST_F(
    CCompressedStreamsTest,
    sizeEstimationWithoutStoredSize
    );

TEST(
    Serialization,
    STL_stdvector
    );

TEST(
    Serialization,
    STL_stdmap
    );

TEST(
    Serialization,
    STL_complex_error_type
    );

TEST(
    Serialization,
    optional_STL
    );

CArchive& operator << (
    CArchive& a,
    const Foo& f
    );

CArchive& operator >> (
    CArchive& a,
    Foo& f
    );

TEST(
    Serialization,
    vector_custom_type
    );

TEST(
    Serialization,
    vector_shared_ptr
    );

// macros

#define ADD_COLOR_MAP(c)
#define APPERTURE
#define APPERTURE
#define APPERTURE

#define ASRT_FAIL( \
    __CONDITIONSTR, \
    __A, \
    __B, \
    __ASTR, \
    __BSTR \
    )

#define ASSERTDEBMSG_( \
    f, \
    __ERROR_MSG \
    )

#define ASSERTDEB_(f)

#define ASSERTDEB_EQUAL_( \
    __A, \
    __B \
    )

#define ASSERTDEB_GE_( \
    __A, \
    __B \
    )

#define ASSERTDEB_GT_( \
    __A, \
    __B \
    )

#define ASSERTDEB_LE_( \
    __A, \
    __B \
    )

#define ASSERTDEB_LT_( \
    __A, \
    __B \
    )

#define ASSERTDEB_NOT_EQUAL_( \
    __A, \
    __B \
    )

#define ASSERTMSG_( \
    f, \
    __ERROR_MSG \
    )

#define ASSERT_(f)
#define ASSERT_DIRECTORY_EXISTS_(DIR)

#define ASSERT_EQUAL_( \
    __A, \
    __B \
    )

#define ASSERT_FILE_EXISTS_(FIL)

#define ASSERT_GE_( \
    __A, \
    __B \
    )

#define ASSERT_GT_( \
    __A, \
    __B \
    )

#define ASSERT_LE_( \
    __A, \
    __B \
    )

#define ASSERT_LT_( \
    __A, \
    __B \
    )

#define ASSERT_NEAR_( \
    __A, \
    __B, \
    __TOLERANCE \
    )

#define ASSERT_NOT_EQUAL_( \
    __A, \
    __B \
    )

#define BIG_STRING
#define BUFFER_OFFSET(offset)

#define BUILD_128BIT_CONST( \
    _name, \
    B0, \
    B1, \
    B2, \
    B3, \
    B4, \
    B5, \
    B6, \
    B7, \
    B8, \
    B9, \
    B10, \
    B11, \
    B12, \
    B13, \
    B14, \
    B15 \
    )

#define CALIB_DECIMAT

#define CHECK_AND_RET_ERROR( \
    _COND_, \
    _MSG_ \
    )

#define CHECK_AND_RET_ERROR( \
    _COND_, \
    _MSG_ \
    )

#define CHECK_AND_RET_ERROR( \
    _COND_, \
    _MSG_ \
    )

#define CHECK_AND_RET_ERROR( \
    _COND_, \
    _MSG_ \
    )

#define CLASS_ID(T)

#define CLASS_ID_NAMESPACE( \
    class_name, \
    namespaceName \
    )

#define CLASS_ID_TEMPLATE( \
    class_name, \
    T \
    )

#define COMMON_PTG_DESIGN_PARAMS
#define DECLARE_CUSTOM_TTYPENAME(_TYPE)
#define DECLARE_OP_FUNCTION(_NAME)
#define DECLARE_TTYPENAME_CLASSNAME(_CLASSNAME)
#define DEFAULT_LOGLVL_MRPT_UNSCOPED
#define DEFINE_GENERIC_SENSOR(class_name)
#define DEFINE_SCHEMA_SERIALIZABLE()

#define DEFINE_SERIALIZABLE( \
    class_name, \
    NS \
    )

#define DEFINE_VIRTUAL_MRPT_OBJECT( \
    class_name, \
    NameSpace \
    )

#define DEFINE_VIRTUAL_SERIALIZABLE( \
    class_name, \
    NameSpace \
    )

#define DEF_TYPESTR(_NAME)
#define DEG2RAD
#define DOFOR(_MSG_ID)
#define DO_MATDYN_INSTANTIATION(T_)
#define DO_MATDYN_INSTANTIATION(T_)
#define DO_MATDYN_INSTANTIATION(T_)
#define DO_MATDYN_INSTANTIATION(T_)
#define DO_MATDYN_INSTANTIATION(T_)
#define DO_MATDYN_INSTANTIATION(T_)
#define DO_MATFIXED_INSTANTIATION(T_)
#define DO_MATFIXED_INSTANTIATION(T_)
#define DO_MATFIXED_INSTANTIATION(T_)
#define DO_MATFIXED_INSTANTIATION(T_)
#define DO_MATFIXED_INSTANTIATION(T_)
#define DO_MATFIXED_INSTANTIATION(T_)
#define DO_MATFIXED_INSTANTIATION(T_)
#define DO_MATFIXED_INSTANTIATION(T_)
#define DO_MATFIXED_INSTANTIATION(T_)
#define DO_MATFIXED_INSTANTIATION(T_)
#define DO_MATFIXED_INSTANTIATION(T_)

#define DO_MATFIXED_INSTANTIATION_NM( \
    T_, \
    N_, \
    M_ \
    )

#define DO_MATFIXED_INSTANTIATION_NM( \
    T_, \
    N_, \
    M_ \
    )

#define DO_MATFIXED_INSTANTIATION_NM( \
    T_, \
    N_, \
    M_ \
    )

#define DO_MATFIXED_INSTANTIATION_NM( \
    T_, \
    N_, \
    M_ \
    )

#define DO_MATFIXED_INSTANTIATION_NM( \
    T_, \
    N_, \
    M_ \
    )

#define DO_MATFIXED_INSTANTIATION_NM( \
    T_, \
    N_, \
    M_ \
    )

#define DO_MATFIXED_INSTANTIATION_NM( \
    T_, \
    N_, \
    M_ \
    )

#define DO_MATFIXED_INSTANTIATION_NM( \
    T_, \
    N_, \
    M_ \
    )

#define DO_MATFIXED_INSTANTIATION_NM( \
    T_, \
    N_, \
    M_ \
    )

#define DO_MATFIXED_INSTANTIATION_NM( \
    T_, \
    N_, \
    M_ \
    )

#define DO_MATFIXED_INSTANTIATION_NM( \
    T_, \
    N_, \
    M_ \
    )

#define DO_REGISTER(CLASS_NAME)
#define DO_VECDYN_INSTANTIATION(T_)
#define DO_VECDYN_INSTANTIATION(T_)
#define DO_VECFIXED_INSTANTIATION(T_)
#define DO_VECFIXED_INSTANTIATION(T_)

#define DO_VECFIXED_INSTANTIATION_NM( \
    T_, \
    N_ \
    )

#define DO_VECFIXED_INSTANTIATION_NM( \
    T_, \
    N_ \
    )

#define DUMP_IMU_DATA(x)
#define EXPLICIT_INSTANT_ransac_detect_2D_lines(_TYPE_)
#define EXPLICIT_INST_ransac_detect_3D_planes(_TYPE_)
#define F5(t)
#define FILE_ATTRIB_ARCHIVE
#define FILE_ATTRIB_DIRECTORY
#define GL_GLEXT_PROTOTYPES
#define GNSS_BINARY_MSG_DEFINITION_END
#define GNSS_BINARY_MSG_DEFINITION_MID
#define GNSS_BINARY_MSG_DEFINITION_MID_END
#define GNSS_BINARY_MSG_DEFINITION_START(_MSG_ID)

#define GNSS_MESSAGE_BINARY_BLOCK( \
    DATA_PTR, \
    DATA_LEN \
    )

#define GRAPHS_TESTS(_TYPE)
#define HAVE_FBO

#define HEADER_PIXEL( \
    data, \
    pixel \
    )

#define IMPLEMENTS_GENERIC_SENSOR( \
    class_name, \
    NameSpace \
    )

#define IMPLEMENTS_MRPT_OBJECT( \
    class_name, \
    base, \
    NameSpace \
    )

#define IMPLEMENTS_SERIALIZABLE( \
    class_name, \
    base, \
    NameSpace \
    )

#define IMPLEMENTS_VIRTUAL_MRPT_OBJECT( \
    class_name, \
    base, \
    NS \
    )

#define IMPLEMENTS_VIRTUAL_SERIALIZABLE( \
    class_name, \
    base_class, \
    NS \
    )

#define IMPLEMENTS_VIRTUAL_SERIALIZABLE_NS_PREFIX( \
    class_name, \
    base_class, \
    NS \
    )

#define INTERNAL_IMPLEMENTS_MRPT_OBJECT( \
    class_name, \
    base, \
    NameSpace \
    )

#define INTERNAL_IMPLEMENTS_VIRTUAL_MRPT_OBJECT( \
    class_name, \
    base_name, \
    NS \
    )

#define INTERNAL_MRPT_LOG( \
    _LVL, \
    _STRING \
    )

#define INTERNAL_MRPT_LOG_FMT( \
    _LVL, \
    _FMT_STRING, \
    ... \
    )

#define INTERNAL_MRPT_LOG_ONCE( \
    _LVL, \
    _STRING \
    )

#define INTERNAL_MRPT_LOG_STREAM( \
    _LVL, \
    __CONTENTS \
    )

#define INTERNAL_MRPT_LOG_THROTTLE( \
    _LVL, \
    _PERIOD_SECONDS, \
    _STRING \
    )

#define INTERNAL_MRPT_LOG_THROTTLE_FMT( \
    _LVL, \
    _PERIOD_SECONDS, \
    _FMT_STRING, \
    ... \
    )

#define INTERNAL_MRPT_LOG_THROTTLE_STREAM( \
    _LVL, \
    _PERIOD_SECONDS, \
    __CONTENTS \
    )

#define INTPRECNUMBIT
#define INVALID_SOCKET
#define INVALID_TIMESTAMP

#define IS_CLASS( \
    obj, \
    class_name \
    )

#define IS_DERIVED( \
    obj, \
    class_name \
    )

#define KINECT_H
#define KINECT_RANGES_TABLE_LEN
#define KINECT_RANGES_TABLE_MASK
#define KINECT_W
#define LIK_LF_CACHE_INVALID
#define LIST_ALL_MSGS

#define LOADABLEOPTS_DUMP_VAR( \
    variableName, \
    variableType \
    )

#define LOADABLEOPTS_DUMP_VAR_DEG(variableName)
#define LOAD_FONT(FONTNAME)
#define LUT_TABLE

#define MAKEWORD16B( \
    __LOBYTE, \
    __HILOBYTE \
    )

#define MAKEWORD32B( \
    __LOWORD16, \
    __HIWORD16 \
    )

#define MAKEWORD64B( \
    __LOWORD32, \
    __HIWORD32 \
    )

#define MAP_DEFINITION_END(_CLASS_NAME_)

#define MAP_DEFINITION_REGISTER( \
    _CLASSNAME_STRINGS, \
    _CLASSNAME_WITH_NS \
    )

#define MAP_DEFINITION_START(_CLASS_NAME_)
#define MASK2BYTES
#define MASK3BYTES
#define MASK4BYTES
#define MASK5BYTES
#define MASK6BYTES
#define MASKBITS
#define MASKBYTE

#define MCP_LOAD_OPT( \
    Yaml__, \
    Var__ \
    )

#define MCP_LOAD_OPT_DEG( \
    Yaml__, \
    Var__ \
    )

#define MCP_LOAD_REQ( \
    Yaml__, \
    Var__ \
    )

#define MCP_LOAD_REQ_DEG( \
    Yaml__, \
    Var__ \
    )

#define MCP_SAVE( \
    Yaml__, \
    Var__ \
    )

#define MCP_SAVE_DEG( \
    Yaml__, \
    Var__ \
    )

#define MRPT_AUXTOSTR(__AA)

#define MRPT_CHECK_GCC_VERSION( \
    major, \
    minor \
    )

#define MRPT_CHECK_NORMAL_NUMBER(v)
#define MRPT_CHECK_VISUALC_VERSION(major)
#define MRPT_DAQmxCfgInputBuffer
#define MRPT_DAQmxCfgOutputBuffer
#define MRPT_DAQmxCfgSampClkTiming
#define MRPT_DAQmxClearTask
#define MRPT_DAQmxCreateAIVoltageChan
#define MRPT_DAQmxCreateAOVoltageChan
#define MRPT_DAQmxCreateCIAngEncoderChan
#define MRPT_DAQmxCreateCICountEdgesChan
#define MRPT_DAQmxCreateCILinEncoderChan
#define MRPT_DAQmxCreateCIPeriodChan
#define MRPT_DAQmxCreateCIPulseWidthChan
#define MRPT_DAQmxCreateCOPulseChanFreq
#define MRPT_DAQmxCreateDIChan
#define MRPT_DAQmxCreateDOChan
#define MRPT_DAQmxCreateTask
#define MRPT_DAQmxGetExtendedErrorInfo
#define MRPT_DAQmxReadAnalogF64
#define MRPT_DAQmxReadCounterF64
#define MRPT_DAQmxReadDigitalU8
#define MRPT_DAQmxStartTask
#define MRPT_DAQmxStopTask
#define MRPT_DAQmxWriteAnalogF64
#define MRPT_DAQmxWriteDigitalLines
#define MRPT_DAQmxWriteDigitalU32
#define MRPT_DAQmx_ErrChk(functionCall)
#define MRPT_DECLARE_TTYPENAME(_TYPE)
#define MRPT_DECLARE_TTYPENAME_CONTAINER(_CONTAINER)
#define MRPT_DECLARE_TTYPENAME_CONTAINER_ASSOC(_CONTAINER)
#define MRPT_DECLARE_TTYPENAME_CONTAINER_FIX_SIZE(_CONTAINER)

#define MRPT_DECLARE_TTYPENAME_NAMESPACE( \
    _TYPE, \
    __NS \
    )

#define MRPT_DECLARE_TTYPENAME_NO_NAMESPACE( \
    _TYPE, \
    __NS \
    )

#define MRPT_DECLARE_TTYPENAME_PTR(_TYPE)

#define MRPT_DECLARE_TTYPENAME_PTR_NAMESPACE( \
    _TYPE, \
    __NS \
    )

#define MRPT_DETAIL_ALLOCA_(bytes)
#define MRPT_DETAIL_HAS_ALLOCA_
#define MRPT_END
#define MRPT_END_WITH_CLEAN_UP(stuff)
#define MRPT_ENUM_TYPE_BEGIN(_ENUM_TYPE_WITH_NS)

#define MRPT_ENUM_TYPE_BEGIN_NAMESPACE( \
    _NAMESPACE, \
    _ENUM_TYPE_WITH_NS \
    )

#define MRPT_ENUM_TYPE_END()
#define MRPT_FILL_ENUM(_X)

#define MRPT_FILL_ENUM_CUSTOM_NAME( \
    _X, \
    _NAME \
    )

#define MRPT_FILL_ENUM_MEMBER( \
    _CLASS, \
    _VALUE \
    )

#define MRPT_HAS_SECURE_GETENV
#define MRPT_HAS_SOME_NIDAQMX
#define MRPT_INITIALIZER(f)
#define MRPT_LIKELY(EXPR)

#define MRPT_LOAD_CONFIG_VAR( \
    variableName, \
    variableType, \
    configFileObject, \
    sectionNameStr \
    )

#define MRPT_LOAD_CONFIG_VAR_CAST( \
    variableName, \
    variableType, \
    variableTypeCast, \
    configFileObject, \
    sectionNameStr \
    )

#define MRPT_LOAD_CONFIG_VAR_CAST_NO_DEFAULT( \
    variableName, \
    variableType, \
    variableTypeCast, \
    configFileObject, \
    sectionNameStr \
    )

#define MRPT_LOAD_CONFIG_VAR_CS( \
    variableName, \
    variableType \
    )

#define MRPT_LOAD_CONFIG_VAR_DEGREES( \
    variableName, \
    configFileObject, \
    sectionNameStr \
    )

#define MRPT_LOAD_CONFIG_VAR_DEGREES_NO_DEFAULT( \
    variableName, \
    configFileObject, \
    sectionNameStr \
    )

#define MRPT_LOAD_CONFIG_VAR_DEGREESf( \
    variableName, \
    configFileObject, \
    sectionNameStr \
    )

#define MRPT_LOAD_CONFIG_VAR_NO_DEFAULT( \
    variableName, \
    variableType, \
    configFileObject, \
    sectionNameStr \
    )

#define MRPT_LOAD_CONFIG_VAR_REQUIRED_CS( \
    variableName, \
    variableType \
    )

#define MRPT_LOAD_HERE_CONFIG_VAR( \
    variableName, \
    variableType, \
    targetVariable, \
    configFileObject, \
    sectionNameStr \
    )

#define MRPT_LOAD_HERE_CONFIG_VAR_CAST( \
    variableName, \
    variableType, \
    variableTypeCast, \
    targetVariable, \
    configFileObject, \
    sectionNameStr \
    )

#define MRPT_LOAD_HERE_CONFIG_VAR_CAST_NO_DEFAULT( \
    variableName, \
    variableType, \
    variableTypeCast, \
    targetVariable, \
    configFileObject, \
    sectionNameStr \
    )

#define MRPT_LOAD_HERE_CONFIG_VAR_DEGREES( \
    variableName, \
    variableType, \
    targetVariable, \
    configFileObject, \
    sectionNameStr \
    )

#define MRPT_LOAD_HERE_CONFIG_VAR_DEGREES_NO_DEFAULT( \
    variableName, \
    variableType, \
    targetVariable, \
    configFileObject, \
    sectionNameStr \
    )

#define MRPT_LOAD_HERE_CONFIG_VAR_NO_DEFAULT( \
    variableName, \
    variableType, \
    targetVariable, \
    configFileObject, \
    sectionNameStr \
    )

#define MRPT_LOG_DEBUG(_STRING)

#define MRPT_LOG_DEBUG_FMT( \
    _FMT_STRING, \
    ... \
    )

#define MRPT_LOG_DEBUG_STREAM(__CONTENTS)
#define MRPT_LOG_ERROR(_STRING)

#define MRPT_LOG_ERROR_FMT( \
    _FMT_STRING, \
    ... \
    )

#define MRPT_LOG_ERROR_STREAM(__CONTENTS)
#define MRPT_LOG_INFO(_STRING)

#define MRPT_LOG_INFO_FMT( \
    _FMT_STRING, \
    ... \
    )

#define MRPT_LOG_INFO_STREAM(__CONTENTS)
#define MRPT_LOG_ONCE_DEBUG(_STRING)
#define MRPT_LOG_ONCE_ERROR(_STRING)
#define MRPT_LOG_ONCE_INFO(_STRING)
#define MRPT_LOG_ONCE_WARN(_STRING)

#define MRPT_LOG_THROTTLE_DEBUG( \
    _PERIOD_SECONDS, \
    _STRING \
    )

#define MRPT_LOG_THROTTLE_DEBUG_FMT( \
    _PERIOD_SECONDS, \
    _FMT_STRING, \
    ... \
    )

#define MRPT_LOG_THROTTLE_DEBUG_STREAM( \
    _PERIOD_SECONDS, \
    __CONTENTS \
    )

#define MRPT_LOG_THROTTLE_ERROR( \
    _PERIOD_SECONDS, \
    _STRING \
    )

#define MRPT_LOG_THROTTLE_ERROR_FMT( \
    _PERIOD_SECONDS, \
    _FMT_STRING, \
    ... \
    )

#define MRPT_LOG_THROTTLE_ERROR_STREAM( \
    _PERIOD_SECONDS, \
    __CONTENTS \
    )

#define MRPT_LOG_THROTTLE_INFO( \
    _PERIOD_SECONDS, \
    _STRING \
    )

#define MRPT_LOG_THROTTLE_INFO_FMT( \
    _PERIOD_SECONDS, \
    _FMT_STRING, \
    ... \
    )

#define MRPT_LOG_THROTTLE_INFO_STREAM( \
    _PERIOD_SECONDS, \
    __CONTENTS \
    )

#define MRPT_LOG_THROTTLE_WARN( \
    _PERIOD_SECONDS, \
    _STRING \
    )

#define MRPT_LOG_THROTTLE_WARN_FMT( \
    _PERIOD_SECONDS, \
    _FMT_STRING, \
    ... \
    )

#define MRPT_LOG_THROTTLE_WARN_STREAM( \
    _PERIOD_SECONDS, \
    __CONTENTS \
    )

#define MRPT_LOG_WARN(_STRING)

#define MRPT_LOG_WARN_FMT( \
    _FMT_STRING, \
    ... \
    )

#define MRPT_LOG_WARN_STREAM(__CONTENTS)
#define MRPT_MATRIX_CONSTRUCTORS_FROM_POSES(_CLASS_)

#define MRPT_READ_POD( \
    _STREAM, \
    _VARIABLE \
    )

#define MRPT_SAVE_CONFIG_VAR( \
    variableName, \
    configFileObject, \
    sectionNameStr \
    )

#define MRPT_SAVE_CONFIG_VAR_COMMENT( \
    variableName, \
    __comment \
    )

#define MRPT_SAVE_CONFIG_VAR_DEGREES( \
    variableName, \
    configFileObject, \
    sectionNameStr \
    )

#define MRPT_SAVE_CONFIG_VAR_DEGREES_COMMENT( \
    __entryName, \
    __variable, \
    __comment \
    )

#define MRPT_STACK_ALLOC( \
    Type, \
    varName, \
    count \
    )

#define MRPT_START

#define MRPT_TEST( \
    GROUP_, \
    NAME_ \
    )

#define MRPT_TEST_END()
#define MRPT_THROW_UNKNOWN_SERIALIZATION_VERSION(__V)
#define MRPT_TODO(x)
#define MRPT_TRY_END
#define MRPT_TRY_END_WITH_CLEAN_UP(stuff)
#define MRPT_TRY_START
#define MRPT_UNSCOPED_LOGGER_END
#define MRPT_UNSCOPED_LOGGER_START
#define MRPT_USE_NIDAQMX
#define MRPT_USE_NIDAQMXBASE
#define MRPT_VISUALC_VERSION(major)
#define MRPT_WARNING(x)
#define MRPT_X_ASSERT(CHECK)

#define MY_LOAD_HERE_CONFIG_VAR( \
    variableName, \
    variableType, \
    targetVariable, \
    configFileObject, \
    sectionNameStr \
    )

#define MY_LOAD_HERE_CONFIG_VAR_NO_DEFAULT( \
    variableName, \
    variableType, \
    targetVariable, \
    configFileObject, \
    sectionNameStr \
    )

#define M_2PI
#define M_2PIf
#define M_2PIl
#define M_PI
#define M_PIf
#define M_PIl
#define NANOGUI_END_TRY(_parentWindowRef_)
#define NANOGUI_START_TRY
#define N_CIRCULOS
#define PLY_ASCII
#define PLY_BINARY_BE
#define PLY_BINARY_LE
#define POINT_COLOR
#define POSE_COLOR
#define PRINT_JOINT(_J)
#define RAD2DEG
#define RAWDAQ_SHOW_FIRSTS(_VEC)
#define READ_DOUBLE_CHECK_IT_MATCHES_STORED(_VAR)
#define READ_FLOAT_CHECK_IT_MATCHES_STORED(_VAR)
#define READ_JOINT(_J)
#define READ_UINT16_CHECK_IT_MATCHES_STORED(_VAR)
#define REQUIRES(...)
#define RET_ERROR(msg)
#define RET_ERROR(msg)
#define S11
#define S12
#define S13
#define S14
#define S21
#define S22
#define S23
#define S24
#define S31
#define S32
#define S33
#define S34
#define S41
#define S42
#define S43
#define S44
#define SAVE_MATRIX(M)
#define SCHEMA_DESERIALIZE_DATATYPE_VERSION()
#define SCHEMA_SERIALIZE_DATATYPE_VERSION(ser_version)
#define SELBYTE0(v)
#define SELBYTE1(v)
#define SELBYTE2(v)
#define SELBYTE3(v)
#define SENSOR_CLASS_ID(class_name)

#define SENSOR_IS_CLASS( \
    ptrObj, \
    class_name \
    )

#define STATS_EXPERIMENT
#define STATS_EXPERIMENT_ALSO_NC
#define STBIDEF
#define STBIRDEF
#define STBIWDEF
#define STBI_VERSION
#define THE_CAMERA
#define THE_CONTEXT
#define THROW_EXCEPTION(msg)

#define THROW_EXCEPTION_FMT( \
    _FORMAT_STRING, \
    ... \
    )

#define THROW_TYPED_EXCEPTION( \
    msg, \
    exceptionClass \
    )

#define THROW_TYPED_EXCEPTION_FMT( \
    exceptionClass, \
    _FORMAT_STRING, \
    ... \
    )

#define TIMECONV_JULIAN_DATE_START_OF_GPS_TIME
#define TIMEVAL_NUMS
#define TIMEVAL_NUMS_CONST
#define TST_FOR_TYPE(__TSTTYPE)

#define TST_FOR_TYPE2( \
    __TSTTYPE, \
    __TSTTYPE2ndpart \
    )

#define TwoPi
#define VERBOSE_COUT
#define WRITE_JOINT(_J)

#define WRITE_OTHER_SAMPLES( \
    _VECTOR_NAME, \
    _FRMT, \
    _TYPECAST \
    )

#define WX_END_TRY
#define WX_START_TRY
#define __CURRENT_FUNCTION_NAME__
#define __has_builtin(x)
#define __has_extension
#define __has_feature(x)
#define access
#define int_x2idx(_X)
#define int_y2idx(_Y)
#define mpLEGEND_LINEWIDTH
#define mpLEGEND_MARGIN
#define mpLN10
#define mpMIN_X_AXIS_LABEL_SEPARATION
#define mpMIN_Y_AXIS_LABEL_SEPARATION
#define mpSCROLL_NUM_PIXELS_PER_LINE

#define myRGB( \
    r, \
    g, \
    b \
    )

#define rmdir
#define stat

Global Variables

thread_local std::array<mrpt::system::ConsoleForegroundColor, NUMBER_OF_VERBOSITY_LEVELS> logging_levels_to_colors = {         ConsoleForegroundColor::BLUE,              ConsoleForegroundColor::DEFAULT,           ConsoleForegroundColor::GREEN,             ConsoleForegroundColor::RED        }

Implementation file for the COutputLogger header class.

Global Functions

STBIRDEF int stbir_build_samplers_with_splits(STBIR_RESIZE* resize, int try_splits)

It might be less if the image resize can’t be split up that many ways.

int main(int argc, char** argv)

Standalone tool: generate undistortion ground truth using OpenCV.

Usage: ./generate_undistort_groundtruth <input_image> <output_undistorted_image>

The camera parameters are hard-coded below to match the unit test values in CUndistortMap_unittest.cpp. If you change them there, update them here too.

static CGenericPointsMap makeTestMap()

Build a small map with known field values so tests can assert on content.

static std::vector<cell_t> initObstacleGrid(
    const COccupancyGridMap2D& theMap,
    const TPoint2D& origin,
    const TPoint2D& target,
    float occupancyThreshold,
    float robotRadius
    )

Build the wave-front search grid from an occupancy map.

Cells are filled with CELL_EMPTY (free) or CELL_OBSTACLE, obstacles are dilated by robotRadius, and the origin/target cells are stamped.

static bool reconstructPath(
    const std::vector<cell_t>& grid,
    int size_x,
    int passCellFound_x,
    int passCellFound_y,
    const TPoint2D& origin,
    const TPoint2D& target,
    const COccupancyGridMap2D& theMap,
    double minStepInReturnedPath,
    float maxSearchPathLength,
    std::deque<TPoint2D>& path
    )

Reconstruct the path from the wave-front convergence cell to both the origin (backward trace) and the target (forward trace), then subsample into a 2D point deque.

Returns false and leaves path empty if the max path length is exceeded.

bool TIMECONV_GetUTCTimeFromJulianDate(const double julian_date, mrpt::system::TTimeParts& utc)

Number of days since noon Universal Time Jan 1, 4713 BCE (Julian calendar) [days].

static TPoint3Df toEyeSpace(const TPoint3Df& localPt, const CPose3D& objPose, const TRenderMatrices& state)

Helper: Transform a point from local to eye space.

static bool isPointInFrustum(const TPoint3Df& eyePt, const TRenderMatrices& state)

Helper: Check if a point is inside the view frustum (in clip space)

static bool bboxIntersectsFrustum(const TBoundingBoxf& bbox, const CPose3D& objPose, const TRenderMatrices& state)

Helper: Check if a bounding box intersects the view frustum.

TEST(Random, PermuteVector)

Test for permuteVector (both versions)

TEST(Random, DrawUniformUnsignedIntRange)

Test for drawUniformUnsignedIntRange.

TEST(Random, DrawUniformVector)

Test for drawUniformVector.

TEST(Random, GlobalHelpers)

Test for Global/Static Helper Functions (vectorRandomUni)

Macros

#define ASSERTMSG_(f, __ERROR_MSG)

Throws a stacked exception if condition “f” is false; with custom message.

See also:

MRPT_TRY_START, MRPT_TRY_END

#define ASSERT_(f)

Throws a stacked exception if condition “f” is false.

See also:

MRPT_TRY_START, MRPT_TRY_END

#define ASSERT_EQUAL_(__A, __B)

Assert comparing two values, reporting their actual values upon failure.

#define ASSERT_GE_(__A, __B)

Checks A>=B.

#define ASSERT_GT_(__A, __B)

Checks A>B.

#define ASSERT_LE_(__A, __B)

Checks A<=B.

#define ASSERT_LT_(__A, __B)

Checks A<B.

#define ASSERT_NEAR_(__A, __B, __TOLERANCE)

Checks two float/double values, reporting their values upon failure.

If A, B, and Tolerance are of different types, keep in mind that they will be compared after converting into typeof(A).

#define CLASS_ID(T)

Access to runtime class ID for a defined class name.

#define DECLARE_CUSTOM_TTYPENAME(_TYPE)

Identical to MRPT_DECLARE_TTYPENAME but intended for user code.

MUST be placed at the GLOBAL namespace. Can be used for types declared at the global or within some namespace. Just write the full namespace path as _TYPE argument here.

See also:

TTypeName, DECLARE_TTYPENAME_CLASSNAME

#define DECLARE_TTYPENAME_CLASSNAME(_CLASSNAME)

Like DECLARE_CUSTOM_TTYPENAME(), but for use within the class declaration body.

It has the advantage of not requiring macros/definitions out of the original class namespace.

See also:

TTypeName

#define DEFINE_GENERIC_SENSOR(class_name)

This declaration must be inserted in all CGenericSensor classes definition, within the class declaration.

#define DEFINE_SCHEMA_SERIALIZABLE()

This declaration must be inserted in all CSerializable classes definition, within the class declaration.

#define DEFINE_SERIALIZABLE(class_name, NS)

This declaration must be inserted in all CSerializable classes definition, within the class declaration.

#define DEFINE_VIRTUAL_MRPT_OBJECT(class_name, NameSpace)

This declaration must be inserted in virtual CObject classes definition:

#define DEFINE_VIRTUAL_SERIALIZABLE(class_name, NameSpace)

This declaration must be inserted in virtual CSerializable classes definition:

#define IMPLEMENTS_GENERIC_SENSOR(class_name, NameSpace)

This must be inserted in all CGenericSensor classes implementation files:

#define IMPLEMENTS_MRPT_OBJECT(class_name, base, NameSpace)

Must be added to all CObject-derived classes implementation file.

This registers class ns1::Foo as “ns1::Foo”.

#define IMPLEMENTS_SERIALIZABLE(class_name, base, NameSpace)

To be added to all CSerializable-classes implementation files.

This registers the class name with the NameSpace prefix.

#define IMPLEMENTS_VIRTUAL_SERIALIZABLE(class_name, base_class, NS)

This must be inserted as implementation of some required members for virtual CSerializable classes:

#define INTERNAL_IMPLEMENTS_VIRTUAL_MRPT_OBJECT(class_name, base_name, NS)

This must be inserted as implementation of some required members for virtual CObject classes:

#define IS_CLASS(obj, class_name)

True if the given reference to object (derived from mrpt::rtti::CObject) is of the given class.

#define IS_DERIVED(obj, class_name)

True if the given reference to object (derived from mrpt::rtti::CObject) is an instance of the given class OR any of its derived classes.

#define LOADABLEOPTS_DUMP_VAR(variableName, variableType)

Macro for dumping a variable to a stream, within the method “dumpToTextStream(out)” (Variable types are: int, double, float, bool, string.

#define LOADABLEOPTS_DUMP_VAR_DEG(variableName)

Macro for dumping a variable to a stream, transforming the argument from radians to degrees.

#define MAP_DEFINITION_REGISTER(_CLASSNAME_STRINGS, _CLASSNAME_WITH_NS)

Registers one map class into TMetricMapInitializer factory.

One or several alternative class names can be provided, separated with whitespaces or commas

#define MAP_DEFINITION_START(_CLASS_NAME_)

Add a MAP_DEFINITION_START()

MAP_DEFINITION_END() block inside the declaration of each metric map

#define MCP_LOAD_OPT(Yaml__, Var__)

Macro to load a variable from a mrpt::containers::yaml (initials MCP) dictionary, leaving it with its former value if not found (OPTional).

Usage:

mrpt::containers::yaml p;
double K;

MCP_LOAD_OPT(p, K);

Since MRPT 2.3.2, this also works for enums, converting to textual names of values. Note that this requires enums to implement mrpt::typemeta::TEnumType.

#define MCP_LOAD_OPT_DEG(Yaml__, Var__)

Just like MCP_LOAD_OPT(), but converts the read number from degrees to radians.

#define MCP_LOAD_REQ(Yaml__, Var__)

Macro to load a variable from a mrpt::containers::yaml (initials MCP) dictionary, throwing an std::invalid_argument exception if the value is not found (REQuired).

Usage:

mrpt::containers::yaml p;
double K;

MCP_LOAD_REQ(p, K);

Since MRPT 2.3.2, this also works for enums, converting to textual names of values. Note that this requires enums to implement mrpt::typemeta::TEnumType.

#define MCP_LOAD_REQ_DEG(Yaml__, Var__)

Just like MCP_LOAD_REQ(), but converts the read number from degrees to radians.

#define MCP_SAVE(Yaml__, Var__)

Macro to store a variable into a mrpt::containers::yaml (initials MCP) dictionary, using as “key” the name of the variable.

Usage:

mrpt::containers::yaml p;
double K = ...;

MCP_SAVE(p, K);

// If you want "K" to have degree units in the parameter block, radians when
// loaded in memory:
MCP_SAVE_DEG(p,K);

Since MRPT 2.3.2, this also works for enums, converting to textual names of values. Note that this requires enums to implement mrpt::typemeta::TEnumType.

#define MRPT_CHECK_GCC_VERSION(major, minor)

MRPT_CHECK_GCC_VERSION(MAJ,MIN)

#define MRPT_CHECK_NORMAL_NUMBER(v)

Throws an exception if the number is NaN, IND, or +/-INF, or return the same number otherwise.

#define MRPT_DECLARE_TTYPENAME_NAMESPACE(_TYPE, __NS)

Declares a typename to be “namespace::type”.

See also:

MRPT_DECLARE_TTYPENAME_NO_NAMESPACE

#define MRPT_DECLARE_TTYPENAME_NO_NAMESPACE(_TYPE, __NS)

Declares a typename to be “type” (without the NS prefix)

See also:

MRPT_DECLARE_TTYPENAME_NAMESPACE

#define MRPT_FILL_ENUM(_X)

For use in specializations of TEnumTypeFiller.

#define MRPT_LIKELY(EXPR)

MRPT_LIKELY() : disable the branch prediction and manually setting the preference for the positive case.

See: https://akrzemi1.wordpress.com/2017/05/18/asserts-in-constexpr-functions

#define MRPT_LOAD_CONFIG_VAR( \
    variableName, \
    variableType, \
    configFileObject, \
    sectionNameStr \
    )

An useful macro for loading variables stored in a INI-like file under a key with the same name that the variable, and assigning the variable the current value if not found in the config file.

The variableType must be the suffix of “read_XXX” functions, i.e. int, bool,…

#define MRPT_LOAD_CONFIG_VAR_CS(variableName, variableType)

Shortcut for MRPT_LOAD_CONFIG_VAR() for config file object named c and section string named s

#define MRPT_LOAD_CONFIG_VAR_DEGREES( \
    variableName, \
    configFileObject, \
    sectionNameStr \
    )

Loads a double variable, stored as radians but entered in the INI-file as degrees.

#define MRPT_LOAD_CONFIG_VAR_DEGREES_NO_DEFAULT( \
    variableName, \
    configFileObject, \
    sectionNameStr \
    )

Loads a double, required, variable, stored as radians but entered in the INI-file as degrees.

#define MRPT_LOAD_CONFIG_VAR_REQUIRED_CS(variableName, variableType)

Shortcut for MRPT_LOAD_CONFIG_VAR_NO_DEFAULT() for REQUIRED variables config file object named c and section string named s

#define MRPT_LOG_DEBUG(_STRING)

Use: MRPT_LOG_DEBUG("message");

#define MRPT_LOG_DEBUG_FMT(_FMT_STRING, ...)

Use: MRPT_LOG_DEBUG_FMT("i=%u", i);

#define MRPT_LOG_DEBUG_STREAM(__CONTENTS)

Use: MRPT_LOG_DEBUG_STREAM("Var=" << value << " foo=" << foo_var);

#define MRPT_LOG_ONCE_DEBUG(_STRING)

Use: MRPT_LOG_ONCE_DEBUG("once-only message");

#define MRPT_LOG_THROTTLE_DEBUG(_PERIOD_SECONDS, _STRING)

Use: MRPT_LOG_THROTTLE_DEBUG(5.0, "message");

#define MRPT_LOG_THROTTLE_DEBUG_FMT(_PERIOD_SECONDS, _FMT_STRING, ...)

Usage: MRPT_LOG_THROTTLE_DEBUG_FMT(5.0, "i=%u", i);

#define MRPT_LOG_THROTTLE_DEBUG_STREAM(_PERIOD_SECONDS, __CONTENTS)

Usage: MRPT_LOG_THROTTLE_DEBUG_STREAM(5.0, "Var=" << value << " foo=" << foo_var);

#define MRPT_THROW_UNKNOWN_SERIALIZATION_VERSION(__V)

For use in CSerializable implementations.

#define MRPT_TRY_END

The end of a standard MRPT “try…catch()” block that allows tracing throw the call stack after an exception.

See also:

MRPT_TRY_START, MRPT_TRY_END_WITH_CLEAN_UP

#define MRPT_TRY_END_WITH_CLEAN_UP(stuff)

The end of a standard MRPT “try…catch()” block that allows tracing throw the call stack after an exception, including a “clean up” piece of code to be run before throwing the exceptions.

See also:

MRPT_TRY_END, MRPT_TRY_START

#define MRPT_TRY_START

The start of a standard MRPT “try…catch()” block that allows tracing throw the call stack after an exception.

See also:

MRPT_TRY_END, MRPT_TRY_END_WITH_CLEAN_UP

#define MRPT_UNSCOPED_LOGGER_START

For calling any MRPT_LOG_*() macro from outside of an object inherited from COutputLogger.

Debug level is DEBUG if build with _DEBUG preprocessor flag, INFO otherwise. Use:

MRPT_UNSCOPED_LOGGER_START;
MRPT_LOG_WARN("blah");
MRPT_LOG_ERROR_STREAM("error: " << strval);
MRPT_UNSCOPED_LOGGER_END;
#define MRPT_VISUALC_VERSION(major)

MRPT_CHECK_VISUALC_VERSION(Version) Version=8 for 2005, 9=2008, 10=2010, 11=2012, 12=2013, 14=2015.

#define MRPT_X_ASSERT(CHECK)

MRPT_X_ASSERT() : build error if condition is known not to work at compile time, throw an exception at runtime if the condition needs to be evaluated.

#define SAVE_MATRIX(M)

A useful macro for saving matrixes to a file while debugging.

#define SCHEMA_DESERIALIZE_DATATYPE_VERSION()

For use inside serializeFrom(CSchemeArchiveBase) methods.

#define SCHEMA_SERIALIZE_DATATYPE_VERSION(ser_version)

For use inside all serializeTo(CSchemeArchiveBase) methods.

#define THROW_EXCEPTION(msg)

Parameters:

msg

This can be a char*, a std::string, or a literal string. Defines a unified way of reporting exceptions

See also:

MRPT_TRY_START, MRPT_TRY_END, THROW_EXCEPTION_FMT

#define __CURRENT_FUNCTION_NAME__

A macro for obtaining the name of the current function: