- keep JSON_DISABLE_ENUM_SERIALIZATION and
JSON_DISABLE_TUPLE_REFERENCE_CONVERSION defined with
JSON_TEST_KEEP_MACROS, so that every file of a batch sees them, not only
the first one
- mark JSON_TESTS_PRIVATE in the generated batch file as used, as GCC and
Clang report an unused definition when the first file defines it again
(-Wunused-macros)
- suppress bugprone-suspicious-include for the #include-d .cpp files
- avoid local json aliases and variables that hide a global json of
another file in the same batch (MSVC C4459)
Signed-off-by: Niels Lohmann <mail@nlohmann.me>
Two changes roughly halve the CPU time needed to build the unit tests
(clang 21: ~300 s -> ~150 s, GCC 16: ~750-820 s -> ~395-420 s, Debug):
- Move the C++14/17/20-dependent tests into separate
unit-<name>-cpp<N>.cpp files. A test file is built for every standard
whose JSON_HAS_CPP_<N> macro it mentions, so far whole large files were
rebuilt for C++14/17/20 because of a few #ifdef sections. The main files
are now built for C++11 only; the ci_test_*_cxx<N> jobs still build
every file for every standard.
- Add the CMake option JSON_TestUnityBuild (ON by default, OFF with
MinGW): compatible test files are compiled in batches as one
translation unit so they share the template instantiations of the
library. Each file keeps its own CTest test, which runs the batch
executable filtered to that file's test cases. The binary-format tests
form an explicit group; the rest is batched by JSON_TestUnityBatchSize.
Fix the name clashes that merging files exposed, document the rules for
test files in tests/README.md, and point CONTRIBUTING.md to it.
Signed-off-by: Niels Lohmann <mail@nlohmann.me>