From d27698ee55110d00407c085cb05249d5b1445c56 Mon Sep 17 00:00:00 2001 From: Niels Lohmann Date: Sun, 27 Sep 2026 21:47:17 +0200 Subject: [PATCH] Run the cheap binary format size tests unconditionally Only jeopardy.json (52 MB, ~20 s unoptimized) needs doctest::skip(); move it into its own test case so canada.json, twitter.json, citm_catalog.json and sample.json (~1.5 s) also run in JSON_FastTests configurations. Signed-off-by: Niels Lohmann --- tests/src/unit-binary_formats.cpp | 88 ++++++++++++++++--------------- 1 file changed, 45 insertions(+), 43 deletions(-) diff --git a/tests/src/unit-binary_formats.cpp b/tests/src/unit-binary_formats.cpp index ed6d89911..31aa83174 100644 --- a/tests/src/unit-binary_formats.cpp +++ b/tests/src/unit-binary_formats.cpp @@ -14,7 +14,7 @@ using nlohmann::json; #include #include "make_test_data_available.hpp" -TEST_CASE("Binary Formats" * doctest::skip()) +TEST_CASE("Binary Formats") { SECTION("canada.json") { @@ -142,48 +142,6 @@ TEST_CASE("Binary Formats" * doctest::skip()) CHECK((100.0 * double(ubjson_3_size) / double(json_size)) == Approx(84.963)); } - SECTION("jeopardy.json") - { - const auto* filename = TEST_DATA_DIRECTORY "/jeopardy/jeopardy.json"; - json j = json::parse(std::ifstream(filename)); - - const auto json_size = j.dump().size(); - const auto bjdata_1_size = json::to_bjdata(j).size(); - const auto bjdata_2_size = json::to_bjdata(j, true).size(); - const auto bjdata_3_size = json::to_bjdata(j, true, true).size(); - const auto bon8_size = json::to_bon8(j).size(); - const auto bson_size = json::to_bson({{"", j}}).size(); // wrap array in object for BSON - const auto cbor_size = json::to_cbor(j).size(); - const auto msgpack_size = json::to_msgpack(j).size(); - const auto ubjson_1_size = json::to_ubjson(j).size(); - const auto ubjson_2_size = json::to_ubjson(j, true).size(); - const auto ubjson_3_size = json::to_ubjson(j, true, true).size(); - - CHECK(json_size == 52508728); - CHECK(bjdata_1_size == 50710965); - CHECK(bjdata_2_size == 51144830); - CHECK(bjdata_3_size == 51144830); - CHECK(bon8_size == 45942080); - CHECK(bson_size == 56008520); - CHECK(cbor_size == 46187320); - CHECK(msgpack_size == 46158575); - CHECK(ubjson_1_size == 50710965); - CHECK(ubjson_2_size == 51144830); - CHECK(ubjson_3_size == 49861422); - - CHECK((100.0 * double(json_size) / double(json_size)) == Approx(100.0)); - CHECK((100.0 * double(bjdata_1_size) / double(json_size)) == Approx(96.576)); - CHECK((100.0 * double(bjdata_2_size) / double(json_size)) == Approx(97.402)); - CHECK((100.0 * double(bjdata_3_size) / double(json_size)) == Approx(97.402)); - CHECK((100.0 * double(bon8_size) / double(json_size)) == Approx(87.494)); - CHECK((100.0 * double(bson_size) / double(json_size)) == Approx(106.665)); - CHECK((100.0 * double(cbor_size) / double(json_size)) == Approx(87.961)); - CHECK((100.0 * double(msgpack_size) / double(json_size)) == Approx(87.906)); - CHECK((100.0 * double(ubjson_1_size) / double(json_size)) == Approx(96.576)); - CHECK((100.0 * double(ubjson_2_size) / double(json_size)) == Approx(97.402)); - CHECK((100.0 * double(ubjson_3_size) / double(json_size)) == Approx(94.958)); - } - SECTION("sample.json") { const auto* filename = TEST_DATA_DIRECTORY "/json_testsuite/sample.json"; @@ -224,3 +182,47 @@ TEST_CASE("Binary Formats" * doctest::skip()) CHECK((100.0 * double(ubjson_3_size) / double(json_size)) == Approx(89.450)); } } + +// jeopardy.json is 52 MB and produces ~500 MB of serialization output, so it +// is kept apart from the cheap corpus files above (#5418) +TEST_CASE("Binary Formats (jeopardy.json)" * doctest::skip()) +{ + const auto* filename = TEST_DATA_DIRECTORY "/jeopardy/jeopardy.json"; + json j = json::parse(std::ifstream(filename)); + + const auto json_size = j.dump().size(); + const auto bjdata_1_size = json::to_bjdata(j).size(); + const auto bjdata_2_size = json::to_bjdata(j, true).size(); + const auto bjdata_3_size = json::to_bjdata(j, true, true).size(); + const auto bon8_size = json::to_bon8(j).size(); + const auto bson_size = json::to_bson({{"", j}}).size(); // wrap array in object for BSON + const auto cbor_size = json::to_cbor(j).size(); + const auto msgpack_size = json::to_msgpack(j).size(); + const auto ubjson_1_size = json::to_ubjson(j).size(); + const auto ubjson_2_size = json::to_ubjson(j, true).size(); + const auto ubjson_3_size = json::to_ubjson(j, true, true).size(); + + CHECK(json_size == 52508728); + CHECK(bjdata_1_size == 50710965); + CHECK(bjdata_2_size == 51144830); + CHECK(bjdata_3_size == 51144830); + CHECK(bon8_size == 45942080); + CHECK(bson_size == 56008520); + CHECK(cbor_size == 46187320); + CHECK(msgpack_size == 46158575); + CHECK(ubjson_1_size == 50710965); + CHECK(ubjson_2_size == 51144830); + CHECK(ubjson_3_size == 49861422); + + CHECK((100.0 * double(json_size) / double(json_size)) == Approx(100.0)); + CHECK((100.0 * double(bjdata_1_size) / double(json_size)) == Approx(96.576)); + CHECK((100.0 * double(bjdata_2_size) / double(json_size)) == Approx(97.402)); + CHECK((100.0 * double(bjdata_3_size) / double(json_size)) == Approx(97.402)); + CHECK((100.0 * double(bon8_size) / double(json_size)) == Approx(87.494)); + CHECK((100.0 * double(bson_size) / double(json_size)) == Approx(106.665)); + CHECK((100.0 * double(cbor_size) / double(json_size)) == Approx(87.961)); + CHECK((100.0 * double(msgpack_size) / double(json_size)) == Approx(87.906)); + CHECK((100.0 * double(ubjson_1_size) / double(json_size)) == Approx(96.576)); + CHECK((100.0 * double(ubjson_2_size) / double(json_size)) == Approx(97.402)); + CHECK((100.0 * double(ubjson_3_size) / double(json_size)) == Approx(94.958)); +}