diff --git a/include/ddc/discrete_space.hpp b/include/ddc/discrete_space.hpp index a380d3983..8831b7fb6 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`. @@ -221,7 +232,9 @@ std::tuple init_discrete_space(std::tuple KOKKOS_FUNCTION detail::ddim_impl_t const& 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(); } #if defined(KOKKOS_ENABLE_CUDA) || defined(KOKKOS_ENABLE_HIP) @@ -238,15 +251,11 @@ 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() { + // This function requires that `ddc::init_discrete_space(...);` be called first + 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 cbe8c3005..34c0b212b 100644 --- a/tests/discrete_space.cpp +++ b/tests/discrete_space.cpp @@ -24,3 +24,25 @@ TEST(DiscreteSpace, IsDiscreteSpaceInitialized) ddc::DiscreteVector(2))); 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 + EXPECT_DEATH( + ddc::discrete_space(), + R"rgx([Aa]ssert.*is_discrete_space_initialized\(\))rgx"); +#else + GTEST_SKIP(); +#endif +}