#include <visp3/core/vpCameraParameters.h>
#include <visp3/core/vpIoTools.h>
#if defined(VISP_HAVE_NLOHMANN_JSON) && defined(VISP_HAVE_CATCH2)
#include VISP_NLOHMANN_JSON(json.hpp)
using json = nlohmann::json;
#include <catch_amalgamated.hpp>
#ifdef ENABLE_VISP_NAMESPACE
#endif
#include <random>
namespace
{
class vpRandomCamGenerator : public Catch::Generators::IGenerator<vpCameraParameters>
{
private:
std::minstd_rand m_rand;
std::uniform_int_distribution<> m_count_dist;
std::uniform_int_distribution<> m_type_dist;
std::uniform_real_distribution<> m_dist;
public:
vpRandomCamGenerator(double low, double high)
: m_rand(std::random_device {}()), m_count_dist(1, 5), m_type_dist(0, 2), m_dist(low, high)
{
static_cast<void>(next());
}
bool next() VP_OVERRIDE
{
const double px = m_dist(m_rand);
const double py = m_dist(m_rand);
const double u0 = m_dist(m_rand);
const double v0 = m_dist(m_rand);
const int type = m_type_dist(m_rand);
switch (type) {
case 0: {
break;
}
case 1: {
break;
}
case 2: {
std::vector<double> coeffs;
const int count = m_count_dist(m_rand);
for (int i = 0; i < count; ++i) {
coeffs.push_back(m_dist(m_rand));
}
break;
}
default: {
}
}
return true;
}
};
Catch::Generators::GeneratorWrapper<vpCameraParameters> randomCam(double low, double high)
{
return Catch::Generators::GeneratorWrapper<vpCameraParameters>(Catch::Detail::make_unique<vpRandomCamGenerator>(low, high));
}
}
SCENARIO("Serializing and deserializing a single vpCameraParameters", "[json]")
{
GIVEN("Some camera intrinsics")
{
THEN("Serializing and deserializing does not modify the object")
{
const json j = cam;
REQUIRE(cam == otherCam);
}
}
}
SCENARIO("Serializing two cameras", "[json]")
{
GIVEN("Some camera intrinsics")
{
if (cam != cam2) {
WHEN("serializing and deserializing two different cameras")
{
THEN("The deserialized cams are still different")
{
const json j1 = cam;
const json j2 = cam2;
REQUIRE(resCam != resCam2);
}
}
}
}
}
int main(int argc, char *argv[])
{
Catch::Session session;
session.applyCommandLine(argc, argv);
int numFailed = session.run();
return numFailed;
}
#else
int main() { return EXIT_SUCCESS; }
#endif
Generic class defining intrinsic camera parameters.
void initPersProjWithoutDistortion(double px, double py, double u0, double v0)
void initPersProjWithDistortion(double px, double py, double u0, double v0, double kud, double kdu)
void initProjWithKannalaBrandtDistortion(double px, double py, double u0, double v0, const std::vector< double > &distortion_coefficients)
error that can be emitted by ViSP classes.
@ badValue
Used to indicate that a value is not in the allowed range.