From 4be1e2bd0ecf563624651976e3b1f970236df6bf Mon Sep 17 00:00:00 2001 From: Florian Albrechtskirchinger Date: Sat, 11 Jun 2022 14:55:18 +0200 Subject: [PATCH] CI: Enable 32bit unit test --- cmake/ci.cmake | 7 +++ tests/CMakeLists.txt | 100 +++++++++++++++++++++---------------------- 2 files changed, 57 insertions(+), 50 deletions(-) diff --git a/cmake/ci.cmake b/cmake/ci.cmake index db9aae62e..26b11a848 100644 --- a/cmake/ci.cmake +++ b/cmake/ci.cmake @@ -529,6 +529,13 @@ add_custom_target(ci_test_coverage COMMAND ${CMAKE_COMMAND} --build ${PROJECT_BINARY_DIR}/build_coverage COMMAND cd ${PROJECT_BINARY_DIR}/build_coverage && ${CMAKE_CTEST_COMMAND} --parallel ${N} --output-on-failure + COMMAND CXX=g++ ${CMAKE_COMMAND} + -DCMAKE_BUILD_TYPE=Debug -GNinja -DCMAKE_CXX_FLAGS="-m32;--coverage;-fprofile-arcs;-ftest-coverage" + -DJSON_BuildTests=ON -DJSON_32bitTest=ONLY + -S${PROJECT_SOURCE_DIR} -B${PROJECT_BINARY_DIR}/build_coverage32 + COMMAND ${CMAKE_COMMAND} --build ${PROJECT_BINARY_DIR}/build_coverage32 + COMMAND cd ${PROJECT_BINARY_DIR}/build_coverage32 && ${CMAKE_CTEST_COMMAND} --parallel ${N} --output-on-failure + COMMAND ${LCOV_TOOL} --directory . --capture --output-file json.info --rc lcov_branch_coverage=1 COMMAND ${LCOV_TOOL} -e json.info ${SRC_FILES} --output-file json.info.filtered --rc lcov_branch_coverage=1 COMMAND ${CMAKE_SOURCE_DIR}/tests/thirdparty/imapdl/filterbr.py json.info.filtered > json.info.filtered.noexcept diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index ef87c4909..a0193c32c 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -2,8 +2,8 @@ cmake_minimum_required(VERSION 3.13) option(JSON_Valgrind "Execute test suite with Valgrind." OFF) option(JSON_FastTests "Skip expensive/slow tests." OFF) -option(JSON_32bitTest "Enable the 32bit unit test." OFF) +set(JSON_32bitTest AUTO CACHE STRING "Enable the 32bit unit test (ON/OFF/AUTO/ONLY).") set(JSON_TestStandards "" CACHE STRING "The list of standards to test explicitly.") include(test) @@ -34,40 +34,32 @@ endif() # test_main library with shared code to speed up build and common settings ############################################################################# -set(test_main_SOURCES src/unit.cpp) -set(test_main_COMPILE_DEFINITIONS PUBLIC +add_library(test_main OBJECT src/unit.cpp) +target_compile_definitions(test_main PUBLIC DOCTEST_CONFIG_SUPER_FAST_ASSERTS JSON_TEST_KEEP_MACROS) -set(test_main_COMPILE_FEATURES PRIVATE cxx_std_11) -set(test_main_COMPILE_OPTIONS - PUBLIC - $<$:/EHsc;$<$:/Od>> - # MSVC: Force to always compile with W4 - # Disable warning C4566: character represented by universal-character-name '\uFF01' - # cannot be represented in the current code page (1252) - # Disable warning C4996: 'nlohmann::basic_json<...>::operator <<': was declared deprecated - $<$:/W4 /wd4566 /wd4996> - # https://github.com/nlohmann/json/issues/1114 - $<$:/bigobj> $<$:-Wa,-mbig-obj> +target_compile_features(test_main PRIVATE cxx_std_11) +target_compile_options(test_main PUBLIC + $<$:/EHsc;$<$:/Od>> + # MSVC: Force to always compile with W4 + # Disable warning C4566: character represented by universal-character-name '\uFF01' + # cannot be represented in the current code page (1252) + # Disable warning C4996: 'nlohmann::basic_json<...>::operator <<': was declared deprecated + $<$:/W4 /wd4566 /wd4996> + # https://github.com/nlohmann/json/issues/1114 + $<$:/bigobj> $<$:-Wa,-mbig-obj> - # https://github.com/nlohmann/json/pull/3229 - $<$:-diag-disable=2196> + # https://github.com/nlohmann/json/pull/3229 + $<$:-diag-disable=2196> - $<$>:-Wno-deprecated;-Wno-float-equal> - $<$:-Wno-deprecated-declarations> - $<$:-diag-disable=1786>) -set(test_main_INCLUDE_DIRECTORIES PUBLIC + $<$>:-Wno-deprecated;-Wno-float-equal> + $<$:-Wno-deprecated-declarations> + $<$:-diag-disable=1786>) +target_include_directories(test_main PUBLIC thirdparty/doctest thirdparty/fifo_map ${PROJECT_BINARY_DIR}/include) -set(test_main_LINK_LIBRARIES PUBLIC ${NLOHMANN_JSON_TARGET_NAME}) - -add_library(test_main OBJECT ${test_main_SOURCES}) -target_compile_definitions(test_main ${test_main_COMPILE_DEFINITIONS}) -target_compile_features(test_main ${test_main_COMPILE_FEATURES}) -target_compile_options(test_main ${test_main_COMPILE_OPTIONS}) -target_include_directories(test_main ${test_main_INCLUDE_DIRECTORIES}) -target_link_libraries(test_main ${test_main_LINK_LIBRARIES}) +target_link_libraries(test_main PUBLIC ${NLOHMANN_JSON_TARGET_NAME}) ############################################################################# # define test- and standard-specific build settings @@ -124,34 +116,42 @@ message(STATUS "${msg}") # *DO* use json_test_set_test_options() above this line -file(GLOB files src/unit-*.cpp) -list(FILTER files EXCLUDE REGEX "src/unit-32bit.cpp") +string(TOUPPER "${JSON_32bitTest}" json_32bit_test) +if("${json_32bit_test}" STREQUAL AUTO) + # check if compiler is targeting 32bit by default + include(CheckTypeSize) + check_type_size("size_t" sizeof_size_t LANGUAGE CXX) + if(sizeof_size_t AND ${sizeof_size_t} EQUAL 4) + message(STATUS "Auto-enabling 32bit unit test.") + set(json_32bit_test ON) + else() + set(json_32bit_test OFF) + endif() +endif() + +if("${json_32bit_test}" STREQUAL ONLY) + set(files src/unit-32bit.cpp) +else() + file(GLOB files src/unit-*.cpp) + if("${json_32bit_test}" STREQUAL OFF) + list(FILTER files EXCLUDE REGEX src/unit-32bit.cpp) + endif() +endif() foreach(file ${files}) json_test_add_test_for(${file} MAIN test_main CXX_STANDARDS ${test_cxx_standards} ${test_force}) endforeach() -if(JSON_32bitTest) - add_library(test_main32 OBJECT ${test_main_SOURCES}) - target_compile_definitions(test_main32 ${test_main_COMPILE_DEFINITIONS}) - target_compile_features(test_main32 ${test_main_COMPILE_FEATURES}) - target_compile_options(test_main32 ${test_main_COMPILE_OPTIONS} -m32) - target_include_directories(test_main32 ${test_main_INCLUDE_DIRECTORIES}) - target_link_libraries(test_main32 ${test_main_LINK_LIBRARIES}) - target_link_options(test_main32 PUBLIC -m32) - - json_test_add_test_for("src/unit-32bit.cpp" MAIN test_main32 - CXX_STANDARDS ${test_cxx_standards} ${test_force}) +if(NOT "${json_32bit_test}" STREQUAL ONLY) + # test legacy comparison of discarded values + json_test_set_test_options(test-comparison_legacy + COMPILE_DEFINITIONS JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON=1 + ) + json_test_add_test_for(src/unit-comparison.cpp + NAME test-comparison_legacy + MAIN test_main CXX_STANDARDS ${test_cxx_standards} ${test_force} + ) endif() -# test legacy comparison of discarded values -json_test_set_test_options(test-comparison_legacy - COMPILE_DEFINITIONS JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON=1 -) -json_test_add_test_for(src/unit-comparison.cpp - NAME test-comparison_legacy - MAIN test_main CXX_STANDARDS ${test_cxx_standards} ${test_force} -) - # *DO NOT* use json_test_set_test_options() below this line #############################################################################