osrm-backend/unit_tests/util/json_render.cpp
2024-05-23 19:39:00 +02:00

95 lines
2.1 KiB
C++

#include "util/json_container.hpp"
#include "util/json_renderer.hpp"
#include <boost/test/unit_test.hpp>
#include <iostream>
BOOST_AUTO_TEST_SUITE(json_renderer)
using namespace osrm::util::json;
BOOST_AUTO_TEST_CASE(number_truncating)
{
std::string str;
Renderer<std::string> renderer(str);
// this number would have more than 10 decimals if not truncated
renderer(Number{42.9995999594999399299});
BOOST_CHECK_EQUAL(str, "42.99959996");
}
BOOST_AUTO_TEST_CASE(integer)
{
std::string str;
Renderer<std::string> renderer(str);
renderer(Number{42.0});
BOOST_CHECK_EQUAL(str, "42");
}
BOOST_AUTO_TEST_CASE(test_json_issue_6531)
{
std::string output;
osrm::util::json::Renderer<std::string> renderer(output);
renderer(0.0000000000017114087924596788);
BOOST_CHECK_EQUAL(output, "1.711408792e-12");
output.clear();
renderer(42.0);
BOOST_CHECK_EQUAL(output, "42");
output.clear();
renderer(42.1);
BOOST_CHECK_EQUAL(output, "42.1");
output.clear();
renderer(42.12);
BOOST_CHECK_EQUAL(output, "42.12");
output.clear();
renderer(42.123);
BOOST_CHECK_EQUAL(output, "42.123");
output.clear();
renderer(42.1234);
BOOST_CHECK_EQUAL(output, "42.1234");
output.clear();
renderer(42.12345);
BOOST_CHECK_EQUAL(output, "42.12345");
output.clear();
renderer(42.123456);
BOOST_CHECK_EQUAL(output, "42.123456");
output.clear();
renderer(42.1234567);
BOOST_CHECK_EQUAL(output, "42.1234567");
output.clear();
renderer(42.12345678);
BOOST_CHECK_EQUAL(output, "42.12345678");
output.clear();
renderer(42.123456789);
BOOST_CHECK_EQUAL(output, "42.12345679");
output.clear();
renderer(0.12345678912345);
BOOST_CHECK_EQUAL(output, "0.1234567891");
output.clear();
renderer(0.123456789);
BOOST_CHECK_EQUAL(output, "0.123456789");
output.clear();
renderer(0.12345678916);
BOOST_CHECK_EQUAL(output, "0.1234567892");
output.clear();
renderer(123456789123456789.);
BOOST_CHECK_EQUAL(output, "1.234567891e+17");
}
BOOST_AUTO_TEST_SUITE_END()