diff --git a/CMakeLists.txt b/CMakeLists.txt index 66b2749..026fee4 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -8,6 +8,9 @@ endif() project(iris VERSION 0.0.1 LANGUAGES CXX) +if(NOT DEFINED IRIS_ROOT) + set(IRIS_ROOT "${CMAKE_CURRENT_LIST_DIR}") +endif() # ----------------------------------------------------------------- # Global settings @@ -45,8 +48,8 @@ if(MSVC) target_sources( iris PRIVATE - "${PROJECT_SOURCE_DIR}/cpp.hint" - "${PROJECT_SOURCE_DIR}/iris.natvis" + "${CMAKE_CURRENT_LIST_DIR}/cpp.hint" + "${CMAKE_CURRENT_LIST_DIR}/iris.natvis" ) target_link_libraries(iris PUBLIC _iris_cxx_common) diff --git a/iris.natvis b/iris.natvis index 317c676..b928d79 100644 --- a/iris.natvis +++ b/iris.natvis @@ -3,9 +3,9 @@ - + ptr_ [valueless_after_move] {*ptr_} diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 899e6a7..8a34d20 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -1,26 +1,60 @@ # SPDX-License-Identifier: MIT -# For Iris-specific tests. +# ----------------------------------------------------------------- +# Setup the basic targets + +# For internal common settings +add_library(_iris_cxx_test_common INTERFACE) +set_target_properties(_iris_cxx_test_common PROPERTIES CXX_EXTENSIONS OFF) +target_link_libraries(_iris_cxx_test_common INTERFACE _iris_cxx_common) + + +# For Iris-specific tests add_library(iris_cxx_test INTERFACE) set_target_properties(iris_cxx_test PROPERTIES CXX_EXTENSIONS OFF) -target_link_libraries(iris_cxx_test INTERFACE _iris_cxx_common) +target_link_libraries(iris_cxx_test INTERFACE _iris_cxx_test_common) # For external libraries. Excludes strict warning, etc. add_library(iris_cxx_test_external INTERFACE) set_target_properties(iris_cxx_test_external PROPERTIES CXX_EXTENSIONS OFF) -target_link_libraries(iris_cxx_test_external INTERFACE _iris_cxx_common) +target_link_libraries(iris_cxx_test_external INTERFACE _iris_cxx_test_common) if(MSVC) + target_compile_options( + _iris_cxx_test_common + INTERFACE + /wd5072 # ASan intentionally enabled on Release build + /fsanitize=address + ) + target_link_options( + _iris_cxx_test_common + INTERFACE + /ignore:4302 # ASan intentionally enabled on Release build + /INCREMENTAL:NO # required for ASan + ) + target_compile_options( iris_cxx_test INTERFACE /W4 /analyze /analyze:external- ) + target_compile_options( iris_cxx_test_external INTERFACE /analyze- ) else() # non-MSVC + target_compile_options( + _iris_cxx_test_common + INTERFACE + -fsanitize=undefined,address + ) + target_link_options( + _iris_cxx_test_common + INTERFACE + -fsanitize=undefined,address + ) + target_compile_options( iris_cxx_test INTERFACE @@ -28,7 +62,9 @@ else() # non-MSVC ) endif() -# -------------------------------------------- + +# ----------------------------------------------------------------- +# Catch2 # https://github.com/catchorg/Catch2/blob/devel/docs/configuration.md set(CATCH_CONFIG_FAST_COMPILE ON) @@ -44,13 +80,17 @@ FetchContent_Declare( FetchContent_MakeAvailable(Catch2) set_target_properties(Catch2 PROPERTIES CXX_EXTENSIONS OFF) +set_target_properties(Catch2 Catch2WithMain PROPERTIES FOLDER "_deps") + target_compile_definitions(Catch2 PUBLIC DO_NOT_USE_WMAIN) target_link_libraries(Catch2 PRIVATE iris_cxx_test_external) target_link_libraries(Catch2WithMain PRIVATE iris_cxx_test_external) target_link_libraries(iris_cxx_test INTERFACE Catch2::Catch2WithMain) -# -------------------------------------------- + +# ----------------------------------------------------------------- +# Common CMake utilities for testing function(iris_define_test_headers test_name) target_sources(${test_name}_test PRIVATE FILE_SET HEADERS FILES ${ARGN}) @@ -58,14 +98,14 @@ endfunction() function(iris_define_test test_name) add_executable(${test_name}_test ${ARGN}) + target_include_directories(${test_name}_test PRIVATE ${CMAKE_CURRENT_FUNCTION_LIST_DIR}) target_include_directories(${test_name}_test PRIVATE ${CMAKE_CURRENT_LIST_DIR}) - iris_define_test_headers(${test_name} test.hpp) set_target_properties(${test_name}_test PROPERTIES CXX_EXTENSIONS OFF) if(MSVC) # Prevent "Warning: Conflicting entries detected" error set_source_files_properties( - "${PROJECT_SOURCE_DIR}/iris.natvis" + "${IRIS_ROOT}/iris.natvis" TARGET_DIRECTORY ${test_name}_test PROPERTIES VS_SETTINGS "ExcludedFromBuild=true" ) @@ -83,12 +123,30 @@ function(iris_define_tests) endforeach() endfunction() -# -------------------------------------------- +function(iris_define_sub_tests prefix) + foreach(test_name IN LISTS ARGN) + iris_define_test(${prefix}_${test_name} ${test_name}.cpp) + set_target_properties(${prefix}_${test_name}_test PROPERTIES FOLDER "test/${prefix}") + endforeach() +endfunction() + + +# ----------------------------------------------------------------- +# Iris tests if(PROJECT_IS_TOP_LEVEL) add_subdirectory(rvariant) - iris_define_tests( + set( + IRIS_TEST_IRIS_TESTS type_traits + core + indirect ) + + iris_define_sub_tests(iris ${IRIS_TEST_IRIS_TESTS}) + + foreach(test_name IN LISTS IRIS_TEST_IRIS_TESTS) + iris_define_test_headers(iris_${test_name} iris_test.hpp) + endforeach() endif() diff --git a/test/rvariant/core_test.cpp b/test/core.cpp similarity index 99% rename from test/rvariant/core_test.cpp rename to test/core.cpp index 2bad0e9..582ba81 100644 --- a/test/rvariant/core_test.cpp +++ b/test/core.cpp @@ -1,11 +1,11 @@ // SPDX-License-Identifier: MIT +#include "iris_test.hpp" + #include #include #include -#include - #include #include #include diff --git a/test/rvariant/indirect_test.cpp b/test/indirect.cpp similarity index 98% rename from test/rvariant/indirect_test.cpp rename to test/indirect.cpp index da7ab50..a610688 100644 --- a/test/rvariant/indirect_test.cpp +++ b/test/indirect.cpp @@ -1,8 +1,8 @@ // SPDX-License-Identifier: MIT -#include "iris/indirect.hpp" +#include "iris_test.hpp" -#include +#include namespace unit_test { diff --git a/test/test.hpp b/test/iris_test.hpp similarity index 67% rename from test/test.hpp rename to test/iris_test.hpp index 156e6a4..37b15d3 100644 --- a/test/test.hpp +++ b/test/iris_test.hpp @@ -1,5 +1,5 @@ -#ifndef IRIS_TEST_TEST_HPP -#define IRIS_TEST_TEST_HPP +#ifndef IRIS_TEST_IRIS_TEST_HPP +#define IRIS_TEST_IRIS_TEST_HPP // SPDX-License-Identifier: MIT diff --git a/test/rvariant/CMakeLists.txt b/test/rvariant/CMakeLists.txt index 18ece73..ace719c 100644 --- a/test/rvariant/CMakeLists.txt +++ b/test/rvariant/CMakeLists.txt @@ -1,77 +1,18 @@ # SPDX-License-Identifier: MIT -add_executable( - iris_rvariant_test - - # Independent Polyfill - indirect_test.cpp - - # Independent language core / exposition-only utils - core_test.cpp - - # Main library - rvariant_test.cpp - many_alternatives_32_test.cpp - get_visit_test.cpp - flexible_test.cpp - recursive_wrapper_test.cpp - truly_recursive_test.cpp - io_test.cpp -) - -if(MSVC) - target_sources(iris_rvariant_test PRIVATE ../cpp.hint) -endif() - -target_sources( - iris_rvariant_test - PRIVATE FILE_SET HEADERS FILES - rvariant_test.hpp +set( + IRIS_TEST_RVARIANT_TESTS + rvariant + many_alternatives_32 + get_visit + flexible + recursive_wrapper + truly_recursive + io ) -set_target_properties( - iris_rvariant_test - PROPERTIES CXX_EXTENSIONS OFF -) - -if(MSVC) - target_compile_options( - Catch2 - PUBLIC - /wd5072 # ASan intentionally enabled on Release build - /fsanitize=address - PRIVATE - /analyze- - ) - target_link_options( - Catch2 - PUBLIC - /ignore:4302 # ASan intentionally enabled on Release build - /INCREMENTAL:NO # required for ASan - ) - - target_compile_options( - iris_rvariant_test - PUBLIC - /W4 /analyze /analyze:external- - /fsanitize=address - ) -else() - target_compile_options( - iris_rvariant_test - PUBLIC - -fsanitize=undefined,address - ) - target_link_options( - iris_rvariant_test - PUBLIC - -fsanitize=undefined,address - ) -endif() - -target_link_libraries( - iris_rvariant_test - PRIVATE Iris::Iris Catch2::Catch2WithMain -) +iris_define_sub_tests(rvariant ${IRIS_TEST_RVARIANT_TESTS}) -add_test(NAME iris_rvariant_test COMMAND iris_rvariant_test) +foreach(test_name IN LISTS IRIS_TEST_RVARIANT_TESTS) + iris_define_test_headers(rvariant_${test_name} iris_rvariant_test.hpp) +endforeach() diff --git a/test/rvariant/flexible_test.cpp b/test/rvariant/flexible.cpp similarity index 99% rename from test/rvariant/flexible_test.cpp rename to test/rvariant/flexible.cpp index de8724c..14e63f4 100644 --- a/test/rvariant/flexible_test.cpp +++ b/test/rvariant/flexible.cpp @@ -1,8 +1,8 @@ // SPDX-License-Identifier: MIT -#include "rvariant_test.hpp" +#include "iris_rvariant_test.hpp" -#include "iris/rvariant.hpp" +#include #include #include diff --git a/test/rvariant/get_visit_test.cpp b/test/rvariant/get_visit.cpp similarity index 99% rename from test/rvariant/get_visit_test.cpp rename to test/rvariant/get_visit.cpp index 4890002..9daf4ba 100644 --- a/test/rvariant/get_visit_test.cpp +++ b/test/rvariant/get_visit.cpp @@ -1,12 +1,9 @@ -// SPDX-License-Identifier: MIT +// SPDX-License-Identifier: MIT -#include "rvariant_test.hpp" +#include "iris_rvariant_test.hpp" -#include "iris/rvariant.hpp" - -#include "iris/type_traits.hpp" - -#include +#include +#include #include #include diff --git a/test/rvariant/io_test.cpp b/test/rvariant/io.cpp similarity index 97% rename from test/rvariant/io_test.cpp rename to test/rvariant/io.cpp index cc0ea05..b951959 100644 --- a/test/rvariant/io_test.cpp +++ b/test/rvariant/io.cpp @@ -1,4 +1,6 @@ -// SPDX-License-Identifier: MIT +// SPDX-License-Identifier: MIT + +#include "iris_rvariant_test.hpp" #include @@ -37,15 +39,11 @@ struct NonStreamable {}; } // anonymous global -#include "iris/io_fwd.hpp" // this finds `operator<<` in the global ns - -#include "rvariant_test.hpp" - -#include "iris/rvariant/rvariant.hpp" -#include "iris/rvariant/rvariant_io.hpp" -#include "iris/rvariant/recursive_wrapper.hpp" +#include // this finds `operator<<` in the global ns -#include +#include +#include +#include #include #include diff --git a/test/rvariant/rvariant_test.hpp b/test/rvariant/iris_rvariant_test.hpp similarity index 94% rename from test/rvariant/rvariant_test.hpp rename to test/rvariant/iris_rvariant_test.hpp index 58b89ae..6a5a863 100644 --- a/test/rvariant/rvariant_test.hpp +++ b/test/rvariant/iris_rvariant_test.hpp @@ -1,12 +1,12 @@ -#ifndef IRIS_RVARIANT_TEST_HPP -#define IRIS_RVARIANT_TEST_HPP +#ifndef IRIS_TEST_IRIS_RVARIANT_TEST_HPP +#define IRIS_TEST_IRIS_RVARIANT_TEST_HPP // SPDX-License-Identifier: MIT -#include "iris/rvariant/rvariant.hpp" // IWYU pragma: export -#include "iris/format_traits.hpp" // IWYU pragma: export +#include "iris_test.hpp" -#include // IWYU pragma: export +#include // IWYU pragma: export +#include // IWYU pragma: export #include #include diff --git a/test/rvariant/many_alternatives_32_test.cpp b/test/rvariant/many_alternatives_32.cpp similarity index 97% rename from test/rvariant/many_alternatives_32_test.cpp rename to test/rvariant/many_alternatives_32.cpp index a055cee..f318cd2 100644 --- a/test/rvariant/many_alternatives_32_test.cpp +++ b/test/rvariant/many_alternatives_32.cpp @@ -1,7 +1,7 @@ -// SPDX-License-Identifier: MIT +// SPDX-License-Identifier: MIT #if IRIS_CI -#include "rvariant_test.hpp" +#include "iris_rvariant_test.hpp" namespace unit_test { diff --git a/test/rvariant/recursive_wrapper_test.cpp b/test/rvariant/recursive_wrapper.cpp similarity index 99% rename from test/rvariant/recursive_wrapper_test.cpp rename to test/rvariant/recursive_wrapper.cpp index e5527e5..b3cfb76 100644 --- a/test/rvariant/recursive_wrapper_test.cpp +++ b/test/rvariant/recursive_wrapper.cpp @@ -1,9 +1,9 @@ // SPDX-License-Identifier: MIT -#include "iris/rvariant/recursive_wrapper.hpp" -#include "iris/rvariant/rvariant.hpp" +#include "iris_rvariant_test.hpp" -#include +#include +#include #include #include diff --git a/test/rvariant/rvariant_test.cpp b/test/rvariant/rvariant.cpp similarity index 99% rename from test/rvariant/rvariant_test.cpp rename to test/rvariant/rvariant.cpp index 25bcc63..a1647f4 100644 --- a/test/rvariant/rvariant_test.cpp +++ b/test/rvariant/rvariant.cpp @@ -1,14 +1,11 @@ // SPDX-License-Identifier: MIT -#include "rvariant_test.hpp" +#include "iris_rvariant_test.hpp" -#include "iris/rvariant.hpp" - -#include "iris/compare.hpp" -#include "iris/hash.hpp" -#include "iris/type_traits.hpp" - -#include +#include +#include +#include +#include #include #include diff --git a/test/rvariant/truly_recursive_test.cpp b/test/rvariant/truly_recursive.cpp similarity index 98% rename from test/rvariant/truly_recursive_test.cpp rename to test/rvariant/truly_recursive.cpp index dfb78c5..8c347a6 100644 --- a/test/rvariant/truly_recursive_test.cpp +++ b/test/rvariant/truly_recursive.cpp @@ -1,8 +1,8 @@ // SPDX-License-Identifier: MIT -#include "iris/rvariant.hpp" +#include "iris_rvariant_test.hpp" -#include +#include #include #include diff --git a/test/type_traits.cpp b/test/type_traits.cpp index 739fe45..59eae66 100644 --- a/test/type_traits.cpp +++ b/test/type_traits.cpp @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT -#include "test.hpp" +#include "iris_test.hpp" #include