Skip to content

Commit 771c1bb

Browse files
Add an assertion to the discrete_space function and a death test (#875)
* Add an assertion to the discrete_space function and a death test * Add comment and add a check for host_discrete_space * Apply suggestions from code review Co-authored-by: Emily Bourne <louise.bourne@gmail.com> --------- Co-authored-by: Emily Bourne <louise.bourne@gmail.com>
1 parent a40f2d3 commit 771c1bb

File tree

2 files changed

+37
-6
lines changed

2 files changed

+37
-6
lines changed

include/ddc/discrete_space.hpp

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -212,6 +212,17 @@ std::tuple<Arg0, Arg1, Args...> init_discrete_space(std::tuple<DDimImpl, Arg0, A
212212
return detail::extract_after(std::move(a), std::index_sequence_for<Arg0, Arg1, Args...>());
213213
}
214214

215+
/**
216+
* @tparam DDim a discrete dimension
217+
* @return a boolean indicating whether DDim is initialized.
218+
* This function indicates whether a dimension is initialized.
219+
*/
220+
template <class DDim>
221+
bool is_discrete_space_initialized() noexcept
222+
{
223+
return detail::g_discrete_space_dual<DDim>.has_value();
224+
}
225+
215226
/**
216227
* @tparam DDim a discrete dimension
217228
* @return the discrete space instance associated with `DDim`.
@@ -221,7 +232,9 @@ std::tuple<Arg0, Arg1, Args...> init_discrete_space(std::tuple<DDimImpl, Arg0, A
221232
template <class DDim, class MemorySpace = DDC_CURRENT_KOKKOS_SPACE>
222233
KOKKOS_FUNCTION detail::ddim_impl_t<DDim, MemorySpace> const& discrete_space()
223234
{
235+
// This function requires that `ddc::init_discrete_space<DDim>(...);` be called first
224236
if constexpr (std::is_same_v<MemorySpace, Kokkos::HostSpace>) {
237+
assert(is_discrete_space_initialized<DDim>());
225238
return detail::g_discrete_space_dual<DDim>->get_host();
226239
}
227240
#if defined(KOKKOS_ENABLE_CUDA) || defined(KOKKOS_ENABLE_HIP)
@@ -238,15 +251,11 @@ KOKKOS_FUNCTION detail::ddim_impl_t<DDim, MemorySpace> const& discrete_space()
238251
}
239252
}
240253

241-
template <class DDim>
242-
bool is_discrete_space_initialized() noexcept
243-
{
244-
return detail::g_discrete_space_dual<DDim>.has_value();
245-
}
246-
247254
template <class DDim>
248255
detail::ddim_impl_t<DDim, Kokkos::HostSpace> const& host_discrete_space()
249256
{
257+
// This function requires that `ddc::init_discrete_space<DDim>(...);` be called first
258+
assert(is_discrete_space_initialized<DDim>());
250259
return detail::g_discrete_space_dual<DDim>->get_host();
251260
}
252261

tests/discrete_space.cpp

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,3 +24,25 @@ TEST(DiscreteSpace, IsDiscreteSpaceInitialized)
2424
ddc::DiscreteVector<DDimX>(2)));
2525
EXPECT_TRUE(ddc::is_discrete_space_initialized<DDimX>());
2626
}
27+
28+
TEST(DiscreteSpace, HostDiscreteSpace)
29+
{
30+
#if !defined(NDEBUG) // The assertion is only checked if NDEBUG isn't defined
31+
EXPECT_DEATH(
32+
ddc::host_discrete_space<DDimX>(),
33+
R"rgx([Aa]ssert.*is_discrete_space_initialized<DDim>\(\))rgx");
34+
#else
35+
GTEST_SKIP();
36+
#endif
37+
}
38+
39+
TEST(DiscreteSpace, DiscreteSpace)
40+
{
41+
#if !defined(NDEBUG) // The assertion is only checked if NDEBUG isn't defined
42+
EXPECT_DEATH(
43+
ddc::discrete_space<DDimX>(),
44+
R"rgx([Aa]ssert.*is_discrete_space_initialized<DDim>\(\))rgx");
45+
#else
46+
GTEST_SKIP();
47+
#endif
48+
}

0 commit comments

Comments
 (0)