From fcde73eee2b70ea10fc5ce6afe8083ad590ac17b Mon Sep 17 00:00:00 2001 From: Nana Sakisaka <1901813+saki7@users.noreply.github.com> Date: Sat, 7 Feb 2026 19:56:31 +0900 Subject: [PATCH 1/4] Update `iris.natvis` --- iris.natvis | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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_} From a32e615996830b8e7aff97ff551eb45aaef7ab50 Mon Sep 17 00:00:00 2001 From: Nana Sakisaka <1901813+saki7@users.noreply.github.com> Date: Sat, 7 Feb 2026 19:56:49 +0900 Subject: [PATCH 2/4] Update test meta file paths --- CMakeLists.txt | 7 +++++-- test/CMakeLists.txt | 2 +- 2 files changed, 6 insertions(+), 3 deletions(-) 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/test/CMakeLists.txt b/test/CMakeLists.txt index 899e6a7..6448a9d 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -65,7 +65,7 @@ function(iris_define_test test_name) 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" ) From 8a1329af80b92126fa68521e2d075101a1ae136b Mon Sep 17 00:00:00 2001 From: Nana Sakisaka <1901813+saki7@users.noreply.github.com> Date: Sat, 7 Feb 2026 20:40:27 +0900 Subject: [PATCH 3/4] Organize test sources --- test/CMakeLists.txt | 22 +++- test/{rvariant/core_test.cpp => core.cpp} | 4 +- .../indirect_test.cpp => indirect.cpp} | 4 +- test/{test.hpp => iris_test.hpp} | 4 +- test/rvariant/CMakeLists.txt | 123 +++++++----------- .../{flexible_test.cpp => flexible.cpp} | 4 +- .../{get_visit_test.cpp => get_visit.cpp} | 11 +- test/rvariant/{io_test.cpp => io.cpp} | 16 +-- ...ariant_test.hpp => iris_rvariant_test.hpp} | 10 +- ...s_32_test.cpp => many_alternatives_32.cpp} | 4 +- ...wrapper_test.cpp => recursive_wrapper.cpp} | 6 +- .../{rvariant_test.cpp => rvariant.cpp} | 13 +- ...recursive_test.cpp => truly_recursive.cpp} | 4 +- test/type_traits.cpp | 2 +- 14 files changed, 107 insertions(+), 120 deletions(-) rename test/{rvariant/core_test.cpp => core.cpp} (99%) rename test/{rvariant/indirect_test.cpp => indirect.cpp} (98%) rename test/{test.hpp => iris_test.hpp} (67%) rename test/rvariant/{flexible_test.cpp => flexible.cpp} (99%) rename test/rvariant/{get_visit_test.cpp => get_visit.cpp} (99%) rename test/rvariant/{io_test.cpp => io.cpp} (97%) rename test/rvariant/{rvariant_test.hpp => iris_rvariant_test.hpp} (94%) rename test/rvariant/{many_alternatives_32_test.cpp => many_alternatives_32.cpp} (97%) rename test/rvariant/{recursive_wrapper_test.cpp => recursive_wrapper.cpp} (99%) rename test/rvariant/{rvariant_test.cpp => rvariant.cpp} (99%) rename test/rvariant/{truly_recursive_test.cpp => truly_recursive.cpp} (98%) diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 6448a9d..9409172 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -44,6 +44,8 @@ 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) @@ -58,8 +60,8 @@ 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) @@ -83,12 +85,28 @@ 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() + # -------------------------------------------- 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..73a6ec7 100644 --- a/test/rvariant/CMakeLists.txt +++ b/test/rvariant/CMakeLists.txt @@ -1,77 +1,54 @@ # 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_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 +set( + IRIS_TEST_RVARIANT_TESTS + rvariant + many_alternatives_32 + get_visit + flexible + recursive_wrapper + truly_recursive + io ) -add_test(NAME iris_rvariant_test COMMAND iris_rvariant_test) +iris_define_sub_tests(rvariant ${IRIS_TEST_RVARIANT_TESTS}) + +foreach(test_name IN LISTS IRIS_TEST_RVARIANT_TESTS) + iris_define_test_headers(rvariant_${test_name} iris_rvariant_test.hpp) +endforeach() + + +# 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() 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 From b78298e0f67b7c22b01039d2f5c6dbb58eecfcc7 Mon Sep 17 00:00:00 2001 From: Nana Sakisaka <1901813+saki7@users.noreply.github.com> Date: Sat, 7 Feb 2026 21:04:01 +0900 Subject: [PATCH 4/4] Move ASan settings to the test root --- test/CMakeLists.txt | 52 +++++++++++++++++++++++++++++++----- test/rvariant/CMakeLists.txt | 36 ------------------------- 2 files changed, 46 insertions(+), 42 deletions(-) diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 9409172..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) @@ -52,7 +88,9 @@ 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}) @@ -92,7 +130,9 @@ function(iris_define_sub_tests prefix) endforeach() endfunction() -# -------------------------------------------- + +# ----------------------------------------------------------------- +# Iris tests if(PROJECT_IS_TOP_LEVEL) add_subdirectory(rvariant) diff --git a/test/rvariant/CMakeLists.txt b/test/rvariant/CMakeLists.txt index 73a6ec7..ace719c 100644 --- a/test/rvariant/CMakeLists.txt +++ b/test/rvariant/CMakeLists.txt @@ -16,39 +16,3 @@ iris_define_sub_tests(rvariant ${IRIS_TEST_RVARIANT_TESTS}) foreach(test_name IN LISTS IRIS_TEST_RVARIANT_TESTS) iris_define_test_headers(rvariant_${test_name} iris_rvariant_test.hpp) endforeach() - - -# 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()