#include "util/json_container.hpp" #include "util/json_renderer.hpp" #include #include BOOST_AUTO_TEST_SUITE(json_renderer) using namespace osrm::util::json; BOOST_AUTO_TEST_CASE(number_truncating) { std::string str; Renderer 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 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 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()