Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion include/ddc/detail/kokkos.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -175,7 +175,7 @@ KOKKOS_FUNCTION auto build_mdspan(
Kokkos::View<DataType, Properties...> const view,
std::index_sequence<Is...>)
{
KOKKOS_ASSERT((is_kokkos_layout_compatible(view)))
KOKKOS_ASSERT(is_kokkos_layout_compatible(view))
DDC_IF_NVCC_THEN_PUSH_AND_SUPPRESS(implicit_return_from_non_void_function)
using element_type = kokkos_to_mdspan_element_t<DataType>;
using extents_type = Kokkos::dextents<std::size_t, Kokkos::View<DataType, Properties...>::rank>;
Expand Down
17 changes: 11 additions & 6 deletions include/ddc/discrete_domain.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -217,12 +217,17 @@ class DiscreteDomain
sizeof...(DDims) == (0 + ... + DElems::size()),
"Invalid number of dimensions");
static_assert((is_discrete_element_v<DElems> && ...), "Expected DiscreteElements");
return (((DiscreteElement<DDims>(take<DDims>(delems...))
>= DiscreteElement<DDims>(m_element_begin))
&& ...)
&& ((DiscreteElement<DDims>(take<DDims>(delems...))
< DiscreteElement<DDims>(m_element_end))
&& ...));
// GCOVR_EXCL_BR_START
auto const test1
= ((DiscreteElement<DDims>(take<DDims>(delems...))
>= DiscreteElement<DDims>(m_element_begin))
&& ...);
auto const test2
= ((DiscreteElement<DDims>(take<DDims>(delems...))
< DiscreteElement<DDims>(m_element_end))
&& ...);
// GCOVR_EXCL_BR_STOP
return test1 && test2;
}

template <class... DElems>
Expand Down
2 changes: 2 additions & 0 deletions include/ddc/sparse_discrete_domain.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -279,12 +279,14 @@ class SparseDiscreteDomain
sizeof...(DDims) == (0 + ... + DElems::size()),
"Invalid number of dimensions");
static_assert((is_discrete_element_v<DElems> && ...), "Expected DiscreteElements");
// GCOVR_EXCL_BR_START
return (detail::binary_search(
get<DDims>(m_views).data(),
get<DDims>(m_views).data() + get<DDims>(m_views).size(),
uid<DDims>(take<DDims>(delems...)),
std::less {})
&& ...);
// GCOVR_EXCL_BR_STOP
}

template <class... DElems>
Expand Down
30 changes: 14 additions & 16 deletions include/ddc/strided_discrete_domain.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -220,22 +220,20 @@ class StridedDiscreteDomain
sizeof...(DDims) == (0 + ... + DElems::size()),
"Invalid number of dimensions");
static_assert((is_discrete_element_v<DElems> && ...), "Expected DiscreteElements");
auto const test1
= ((DiscreteElement<DDims>(take<DDims>(delems...))
>= DiscreteElement<DDims>(m_element_begin))
&& ...);
auto const test2
= ((DiscreteElement<DDims>(take<DDims>(delems...))
< (DiscreteElement<DDims>(m_element_begin)
+ DiscreteVector<DDims>(m_extents) * DiscreteVector<DDims>(m_strides)))
&& ...);
auto const test3
= ((((DiscreteElement<DDims>(take<DDims>(delems...))
- DiscreteElement<DDims>(m_element_begin))
% DiscreteVector<DDims>(m_strides))
== 0)
&& ...);
return test1 && test2 && test3;
auto const contains_1d = [](DiscreteElementType const i,
DiscreteElementType const b,
DiscreteVectorElement const n,
DiscreteVectorElement const s) {
return (i >= b) && (i < (b + (n - 1) * s + 1)) && ((i - b) % s == 0);
};
// GCOVR_EXCL_BR_START
return (contains_1d(
DiscreteElement<DDims>(take<DDims>(delems...)).uid(),
DiscreteElement<DDims>(m_element_begin).uid(),
DiscreteVector<DDims>(m_extents).value(),
DiscreteVector<DDims>(m_strides).value())
&& ...);
// GCOVR_EXCL_BR_STOP
}

template <class... DElems>
Expand Down
26 changes: 22 additions & 4 deletions tests/discrete_domain.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -132,21 +132,38 @@ TEST(DiscreteDomainTest, CompareSameDomains)
TEST(DiscreteDomainTest, CompareDifferentDomains)
{
DDomXY const dom_x_y_1(lbound_x_y + DVectXY(0, 1), DVectXY(1, 2));
DDomXY const dom_x_y_2(lbound_x_y + DVectXY(2, 3), DVectXY(3, 4));
DDomXY const dom_x_y_2(lbound_x_y + DVectXY(0, 1), DVectXY(3, 4));
DDomXY const dom_x_y_3(lbound_x_y + DVectXY(2, 3), DVectXY(1, 2));
EXPECT_FALSE(dom_x_y_1 == dom_x_y_2);
EXPECT_FALSE(dom_x_y_1 == DDomYX(dom_x_y_2));
EXPECT_TRUE(dom_x_y_1 != dom_x_y_2);
EXPECT_TRUE(dom_x_y_1 != DDomYX(dom_x_y_2));

EXPECT_FALSE(dom_x_y_1 == dom_x_y_3);
EXPECT_FALSE(dom_x_y_1 == DDomYX(dom_x_y_3));
EXPECT_TRUE(dom_x_y_1 != dom_x_y_3);
EXPECT_TRUE(dom_x_y_1 != DDomYX(dom_x_y_3));

EXPECT_FALSE(dom_x_y_2 == dom_x_y_3);
EXPECT_FALSE(dom_x_y_2 == DDomYX(dom_x_y_3));
EXPECT_TRUE(dom_x_y_2 != dom_x_y_3);
EXPECT_TRUE(dom_x_y_2 != DDomYX(dom_x_y_3));
}

TEST(DiscreteDomainTest, CompareEmptyDomains)
{
DDomXY const dom_x_y_1(lbound_x_y + DVectXY(4, 1), DVectXY(0, 0));
DDomXY const dom_x_y_2(lbound_x_y + DVectXY(3, 9), DVectXY(0, 0));
DDomXY const dom_x_y_3(lbound_x_y, nelems_x_y);
EXPECT_TRUE(dom_x_y_1.empty());
EXPECT_TRUE(dom_x_y_2.empty());
EXPECT_FALSE(dom_x_y_3.empty());

EXPECT_TRUE(dom_x_y_1 == dom_x_y_2);
EXPECT_FALSE(dom_x_y_1 != dom_x_y_2);

EXPECT_FALSE(dom_x_y_1 == dom_x_y_3);
EXPECT_TRUE(dom_x_y_1 != dom_x_y_3);
}

TEST(DiscreteDomainTest, Subdomain)
Expand Down Expand Up @@ -247,9 +264,10 @@ TEST(DiscreteDomainTest, Remove)

TEST(DiscreteDomainTest, Contains)
{
DDomXY const dom_x_y(lbound_x_y, nelems_x_y);
EXPECT_TRUE(dom_x_y.contains(lbound_x_y));
EXPECT_FALSE(dom_x_y.contains(lbound_x_y + nelems_x_y));
DDomXY const dom_x_y(lbound_x_y + DVectXY(1, 1), nelems_x_y);
EXPECT_TRUE(dom_x_y.contains(dom_x_y.front()));
EXPECT_FALSE(dom_x_y.contains(dom_x_y.front() - DVectXY(1, 1)));
EXPECT_FALSE(dom_x_y.contains(dom_x_y.back() + DVectXY(1, 1)));
}

TEST(DiscreteDomainTest, DistanceFromFront)
Expand Down
33 changes: 29 additions & 4 deletions tests/strided_discrete_domain.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -137,21 +137,44 @@ TEST(StridedDiscreteDomainTest, CompareSameDomains)
TEST(StridedDiscreteDomainTest, CompareDifferentDomains)
{
DDomXY const dom_x_y_1(lbound_x_y + DVectXY(0, 1), DVectXY(1, 2), strides_x_y);
DDomXY const dom_x_y_2(lbound_x_y + DVectXY(2, 3), DVectXY(3, 4), strides_x_y);
DDomXY const dom_x_y_2(lbound_x_y + DVectXY(0, 1), DVectXY(3, 4), strides_x_y);
DDomXY const dom_x_y_3(lbound_x_y + DVectXY(2, 3), DVectXY(1, 2), strides_x_y);
DDomXY const dom_x_y_4(lbound_x_y + DVectXY(2, 3), DVectXY(1, 2), DVectXY(1, 2));
EXPECT_FALSE(dom_x_y_1 == dom_x_y_2);
EXPECT_FALSE(dom_x_y_1 == DDomYX(dom_x_y_2));
EXPECT_TRUE(dom_x_y_1 != dom_x_y_2);
EXPECT_TRUE(dom_x_y_1 != DDomYX(dom_x_y_2));

EXPECT_FALSE(dom_x_y_1 == dom_x_y_3);
EXPECT_FALSE(dom_x_y_1 == DDomYX(dom_x_y_3));
EXPECT_TRUE(dom_x_y_1 != dom_x_y_3);
EXPECT_TRUE(dom_x_y_1 != DDomYX(dom_x_y_3));

EXPECT_FALSE(dom_x_y_2 == dom_x_y_3);
EXPECT_FALSE(dom_x_y_2 == DDomYX(dom_x_y_3));
EXPECT_TRUE(dom_x_y_2 != dom_x_y_3);
EXPECT_TRUE(dom_x_y_2 != DDomYX(dom_x_y_3));

EXPECT_FALSE(dom_x_y_3 == dom_x_y_4);
EXPECT_FALSE(dom_x_y_3 == DDomYX(dom_x_y_4));
EXPECT_TRUE(dom_x_y_3 != dom_x_y_4);
EXPECT_TRUE(dom_x_y_3 != DDomYX(dom_x_y_4));
}

TEST(StridedDiscreteDomainTest, CompareEmptyDomains)
{
DDomXY const dom_x_y_1(lbound_x_y + DVectXY(4, 1), DVectXY(0, 0), strides_x_y);
DDomXY const dom_x_y_2(lbound_x_y + DVectXY(3, 9), DVectXY(0, 0), strides_x_y);
DDomXY const dom_x_y_3(lbound_x_y, nelems_x_y, strides_x_y);
EXPECT_TRUE(dom_x_y_1.empty());
EXPECT_TRUE(dom_x_y_2.empty());
EXPECT_FALSE(dom_x_y_3.empty());

EXPECT_TRUE(dom_x_y_1 == dom_x_y_2);
EXPECT_FALSE(dom_x_y_1 != dom_x_y_2);

EXPECT_FALSE(dom_x_y_1 == dom_x_y_3);
EXPECT_TRUE(dom_x_y_1 != dom_x_y_3);
}

TEST(StridedDiscreteDomainTest, RangeFor)
Expand Down Expand Up @@ -247,9 +270,11 @@ TEST(StridedDiscreteDomainTest, Remove)

TEST(StridedDiscreteDomainTest, Contains)
{
DDomXY const dom_x_y(lbound_x_y, nelems_x_y, strides_x_y);
EXPECT_TRUE(dom_x_y.contains(lbound_x_y));
EXPECT_FALSE(dom_x_y.contains(lbound_x_y + DVectXY(1, 1)));
DDomXY const dom_x_y(lbound_x_y + DVectXY(1, 1), nelems_x_y, strides_x_y);
EXPECT_TRUE(dom_x_y.contains(dom_x_y.front()));
EXPECT_FALSE(dom_x_y.contains(dom_x_y.front() - DVectXY(1, 1)));
EXPECT_FALSE(dom_x_y.contains(dom_x_y.back() + DVectXY(1, 1)));
EXPECT_FALSE(dom_x_y.contains(dom_x_y.front() + DVectXY(1, 1)));
}

TEST(StridedDiscreteDomainTest, DistanceFromFront)
Expand Down