diff --git a/include/ddc/chunk_span.hpp b/include/ddc/chunk_span.hpp index f45966341..fc3565122 100644 --- a/include/ddc/chunk_span.hpp +++ b/include/ddc/chunk_span.hpp @@ -270,14 +270,15 @@ class ChunkSpan : public ChunkCommon const& slice_spec) const { - assert(select(this->m_domain).contains(slice_spec)); + using detail::TypeSeq; + using QueryDDom = typename detail::RebindDomain>::type; + assert(QueryDDom(this->m_domain).contains(slice_spec)); slicer> const slicer; auto subview = slicer( this->allocation_mdspan(), - ddc::DiscreteDomain(this->m_domain).distance_from_front(slice_spec)); + QueryDDom(this->m_domain).distance_from_front(slice_spec)); using layout_type = typename decltype(subview)::layout_type; using extents_type = typename decltype(subview)::extents_type; - using detail::TypeSeq; using OutTypeSeqDDims = type_seq_remove_t, TypeSeq>; using OutDDom = typename detail::RebindDomain::type; diff --git a/tests/chunk.cpp b/tests/chunk.cpp index 0b6bf4f02..f16266915 100644 --- a/tests/chunk.cpp +++ b/tests/chunk.cpp @@ -526,7 +526,7 @@ TEST(Chunk2DTest, SliceCoordXOutOfBounds) ChunkXY chunk(dom_x_y); char const* const death_msg - = R"rgx([Aa]ssert.*select\(this->m_domain\).contains\(slice_spec\))rgx"; + = R"rgx([Aa]ssert.*QueryDDom\(this->m_domain\).contains\(slice_spec\))rgx"; EXPECT_DEATH(chunk[dom_x.front() - 1], death_msg); EXPECT_DEATH(chunk[dom_x.back() + 1], death_msg); @@ -684,3 +684,10 @@ TEST(ChunkStridedDiscreteDomain, Constructor) EXPECT_EQ(chk(lbound_x_y), 2); EXPECT_EQ(chk(lbound_x_y + DVectXY(10, 10)), 2); } + +TEST(ChunkStridedDiscreteDomain, Slice) +{ + ddc::StridedDiscreteDomain const dom(lbound_x_y, nelems_x_y, DVectXY(10, 10)); + ddc::Chunk chk("", dom, ddc::HostAllocator()); + EXPECT_EQ(chk(lbound_x_y), chk[lbound_x_y]()); +}