mirror of
https://github.com/Cockatrice/Cockatrice.git
synced 2026-11-08 02:53:25 -08:00
Sanitizers tell us what a run did wrong; they say nothing about what it never reached. This adds the other half: an instrumented build whose report says which of our own lines no test executes. Add an ENABLE_COVERAGE option that compiles with --coverage -O0 -g, mirroring the ENABLE_SANITIZERS opt-in including the per-source carve-out that keeps vendored trees out of the denominator. -O0 is deliberate: at higher optimisation levels GCC merges and relocates lines, so the report would describe code that no longer exists in that form. Only GCC is supported, since Clang's intermediate format needs llvm-cov; asking for coverage under Clang is a hard error rather than a build that silently produces unreadable .gcno files. Keep the filters in a committed gcovr.cfg rather than in the invocation. The tests themselves are excluded because they are compiled with the same instrumentation and are only ever executed by the run doing the measuring, so leaving them in would report a healthier project than we have. The process entry points and the client's window chrome go too: each needs a display, an interactive terminal or a live database before it does anything a headless test could observe, so they would otherwise sit at 0% forever and bury real movement. Give coverage its own matrix leg rather than a second flag on the sanitizer leg. The two answer different questions, and combining them slows both down without telling us more. The new variant key gives the leg its own Docker image and ccache entry so the two legs cannot race on the same tag. The leg publishes an HTML report with per-file pages, LCOV, Cobertura XML and a JSON summary. gcovr is a report-time dependency rather than a build dependency, so a missing one warns and skips instead of failing an otherwise green build.
64 lines
2.3 KiB
CMake
64 lines
2.3 KiB
CMake
cockatrice_add_test(NAME parse_cipt_test SOURCES ../../oracle/src/parsehelpers.cpp parse_cipt_test.cpp)
|
|
|
|
# Oracle importer unit tests
|
|
cockatrice_add_test(
|
|
NAME
|
|
oracle_importer_test
|
|
SOURCES
|
|
${VERSION_STRING_CPP}
|
|
../../oracle/src/oracleimporter.cpp
|
|
../../oracle/src/parsehelpers.cpp
|
|
../../oracle/src/raw_json_scanner.cpp
|
|
oracle_importer_test.cpp
|
|
LIBS
|
|
libcockatrice_card
|
|
libcockatrice_interfaces
|
|
)
|
|
|
|
# Oracle importer benchmark tests (manual, not run in CI, incl. RAM benchmark)
|
|
# Optional compression libs, mirrored from oracle/CMakeLists.txt, so the benchmark
|
|
# can download and decompress whatever AllPrintings format the default URL selects.
|
|
# add_definitions() is directory-scoped and order-independent, so HAS_ZLIB/HAS_LZMA also
|
|
# reach the two unit tests above. That is harmless: those macros gate code only in
|
|
# oracle/src/pages.cpp and oracle/src/pagetemplates.cpp, which no test target compiles.
|
|
find_package(ZLIB)
|
|
if(ZLIB_FOUND)
|
|
add_definitions("-DHAS_ZLIB")
|
|
set(_ORACLE_BENCH_EXTRA_SOURCES ../../oracle/src/zip/unzip.cpp ../../oracle/src/zip/zipglobal.cpp)
|
|
cockatrice_disable_sanitizers_for(${_ORACLE_BENCH_EXTRA_SOURCES})
|
|
cockatrice_disable_coverage_for(${_ORACLE_BENCH_EXTRA_SOURCES})
|
|
set(_ORACLE_BENCH_EXTRA_LIBRARIES ${ZLIB_LIBRARIES})
|
|
include_directories(${ZLIB_INCLUDE_DIRS})
|
|
else()
|
|
message(STATUS "Oracle tests: zlib not found; zip download benchmark disabled")
|
|
endif()
|
|
|
|
find_package(LibLZMA)
|
|
if(LIBLZMA_FOUND)
|
|
add_definitions("-DHAS_LZMA")
|
|
list(APPEND _ORACLE_BENCH_EXTRA_SOURCES ../../oracle/src/lzma/decompress.cpp)
|
|
cockatrice_disable_sanitizers_for(../../oracle/src/lzma/decompress.cpp)
|
|
cockatrice_disable_coverage_for(../../oracle/src/lzma/decompress.cpp)
|
|
list(APPEND _ORACLE_BENCH_EXTRA_LIBRARIES ${LIBLZMA_LIBRARIES})
|
|
include_directories(${LIBLZMA_INCLUDE_DIRS})
|
|
else()
|
|
message(STATUS "Oracle tests: LibLZMA not found; xz download benchmark disabled")
|
|
endif()
|
|
|
|
cockatrice_add_manual_test(
|
|
NAME
|
|
oracle_importer_benchmark_test
|
|
SOURCES
|
|
${VERSION_STRING_CPP}
|
|
../../oracle/src/oracleimporter.cpp
|
|
../../oracle/src/parsehelpers.cpp
|
|
../../oracle/src/raw_json_scanner.cpp
|
|
oracle_importer_benchmark_test.cpp
|
|
${_ORACLE_BENCH_EXTRA_SOURCES}
|
|
LIBS
|
|
libcockatrice_card
|
|
libcockatrice_interfaces
|
|
EXTRA_LIBS
|
|
${_ORACLE_BENCH_EXTRA_LIBRARIES}
|
|
MANUAL
|
|
)
|