From 1ca92ead3136c7780141018c4f4102181af2ef7f Mon Sep 17 00:00:00 2001 From: Thomas Padioleau Date: Thu, 19 Jun 2025 21:54:03 +0200 Subject: [PATCH 1/3] Add an assertion to the discrete_space function and a death test --- include/ddc/discrete_space.hpp | 18 ++++++++++++------ tests/discrete_space.cpp | 11 +++++++++++ 2 files changed, 23 insertions(+), 6 deletions(-) diff --git a/include/ddc/discrete_space.hpp b/include/ddc/discrete_space.hpp index a380d3983..ad59169d0 100644 --- a/include/ddc/discrete_space.hpp +++ b/include/ddc/discrete_space.hpp @@ -212,6 +212,17 @@ std::tuple init_discrete_space(std::tuple()); } +/** + * @tparam DDim a discrete dimension + * @return a boolean indicating whether DDim is initialized. + * This function indicates whether a dimension is initialized. + */ +template +bool is_discrete_space_initialized() noexcept +{ + return detail::g_discrete_space_dual.has_value(); +} + /** * @tparam DDim a discrete dimension * @return the discrete space instance associated with `DDim`. @@ -222,6 +233,7 @@ template KOKKOS_FUNCTION detail::ddim_impl_t const& discrete_space() { if constexpr (std::is_same_v) { + assert(is_discrete_space_initialized()); return detail::g_discrete_space_dual->get_host(); } #if defined(KOKKOS_ENABLE_CUDA) || defined(KOKKOS_ENABLE_HIP) @@ -238,12 +250,6 @@ KOKKOS_FUNCTION detail::ddim_impl_t const& discrete_space() } } -template -bool is_discrete_space_initialized() noexcept -{ - return detail::g_discrete_space_dual.has_value(); -} - template detail::ddim_impl_t const& host_discrete_space() { diff --git a/tests/discrete_space.cpp b/tests/discrete_space.cpp index cbe8c3005..650fb02e3 100644 --- a/tests/discrete_space.cpp +++ b/tests/discrete_space.cpp @@ -24,3 +24,14 @@ TEST(DiscreteSpace, IsDiscreteSpaceInitialized) ddc::DiscreteVector(2))); EXPECT_TRUE(ddc::is_discrete_space_initialized()); } + +TEST(DiscreteSpace, DiscreteSpace) +{ +#if !defined(NDEBUG) // The assertion is only checked if NDEBUG isn't defined + EXPECT_DEATH( + ddc::discrete_space(), + R"rgx([Aa]ssert.*is_discrete_space_initialized\(\))rgx"); +#else + GTEST_SKIP(); +#endif +} From b5a72c8e01fd8920b4158b0d14c6cabf42d86096 Mon Sep 17 00:00:00 2001 From: Thomas Padioleau Date: Fri, 20 Jun 2025 14:46:16 +0200 Subject: [PATCH 2/3] Add comment and add a check for host_discrete_space --- include/ddc/discrete_space.hpp | 3 +++ tests/discrete_space.cpp | 11 +++++++++++ 2 files changed, 14 insertions(+) diff --git a/include/ddc/discrete_space.hpp b/include/ddc/discrete_space.hpp index ad59169d0..320fe2818 100644 --- a/include/ddc/discrete_space.hpp +++ b/include/ddc/discrete_space.hpp @@ -232,6 +232,7 @@ bool is_discrete_space_initialized() noexcept template KOKKOS_FUNCTION detail::ddim_impl_t const& discrete_space() { + // Calling this function requires to call first `ddc::init_discrete_space(...);` if constexpr (std::is_same_v) { assert(is_discrete_space_initialized()); return detail::g_discrete_space_dual->get_host(); @@ -253,6 +254,8 @@ KOKKOS_FUNCTION detail::ddim_impl_t const& discrete_space() template detail::ddim_impl_t const& host_discrete_space() { + // Calling this function requires to call first `ddc::init_discrete_space(...);` + assert(is_discrete_space_initialized()); return detail::g_discrete_space_dual->get_host(); } diff --git a/tests/discrete_space.cpp b/tests/discrete_space.cpp index 650fb02e3..34c0b212b 100644 --- a/tests/discrete_space.cpp +++ b/tests/discrete_space.cpp @@ -25,6 +25,17 @@ TEST(DiscreteSpace, IsDiscreteSpaceInitialized) EXPECT_TRUE(ddc::is_discrete_space_initialized()); } +TEST(DiscreteSpace, HostDiscreteSpace) +{ +#if !defined(NDEBUG) // The assertion is only checked if NDEBUG isn't defined + EXPECT_DEATH( + ddc::host_discrete_space(), + R"rgx([Aa]ssert.*is_discrete_space_initialized\(\))rgx"); +#else + GTEST_SKIP(); +#endif +} + TEST(DiscreteSpace, DiscreteSpace) { #if !defined(NDEBUG) // The assertion is only checked if NDEBUG isn't defined From 6584eaf57a507e907369e175d6d3669e466b5c50 Mon Sep 17 00:00:00 2001 From: Thomas Padioleau Date: Fri, 20 Jun 2025 16:45:05 +0200 Subject: [PATCH 3/3] Apply suggestions from code review Co-authored-by: Emily Bourne --- include/ddc/discrete_space.hpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/include/ddc/discrete_space.hpp b/include/ddc/discrete_space.hpp index 320fe2818..8831b7fb6 100644 --- a/include/ddc/discrete_space.hpp +++ b/include/ddc/discrete_space.hpp @@ -232,7 +232,7 @@ bool is_discrete_space_initialized() noexcept template KOKKOS_FUNCTION detail::ddim_impl_t const& discrete_space() { - // Calling this function requires to call first `ddc::init_discrete_space(...);` + // This function requires that `ddc::init_discrete_space(...);` be called first if constexpr (std::is_same_v) { assert(is_discrete_space_initialized()); return detail::g_discrete_space_dual->get_host(); @@ -254,7 +254,7 @@ KOKKOS_FUNCTION detail::ddim_impl_t const& discrete_space() template detail::ddim_impl_t const& host_discrete_space() { - // Calling this function requires to call first `ddc::init_discrete_space(...);` + // This function requires that `ddc::init_discrete_space(...);` be called first assert(is_discrete_space_initialized()); return detail::g_discrete_space_dual->get_host(); }