Skip to content

Commit 718cef2

Browse files
committed
Refactor logical and reductions to improve coverage
1 parent 23760f3 commit 718cef2

File tree

6 files changed

+79
-31
lines changed

6 files changed

+79
-31
lines changed

include/ddc/detail/kokkos.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -175,7 +175,7 @@ KOKKOS_FUNCTION auto build_mdspan(
175175
Kokkos::View<DataType, Properties...> const view,
176176
std::index_sequence<Is...>)
177177
{
178-
KOKKOS_ASSERT((is_kokkos_layout_compatible(view)))
178+
KOKKOS_ASSERT(is_kokkos_layout_compatible(view))
179179
DDC_IF_NVCC_THEN_PUSH_AND_SUPPRESS(implicit_return_from_non_void_function)
180180
using element_type = kokkos_to_mdspan_element_t<DataType>;
181181
using extents_type = Kokkos::dextents<std::size_t, Kokkos::View<DataType, Properties...>::rank>;

include/ddc/discrete_domain.hpp

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -217,12 +217,17 @@ class DiscreteDomain
217217
sizeof...(DDims) == (0 + ... + DElems::size()),
218218
"Invalid number of dimensions");
219219
static_assert((is_discrete_element_v<DElems> && ...), "Expected DiscreteElements");
220-
return (((DiscreteElement<DDims>(take<DDims>(delems...))
221-
>= DiscreteElement<DDims>(m_element_begin))
222-
&& ...)
223-
&& ((DiscreteElement<DDims>(take<DDims>(delems...))
224-
< DiscreteElement<DDims>(m_element_end))
225-
&& ...));
220+
// GCOVR_EXCL_BR_START
221+
auto const test1
222+
= ((DiscreteElement<DDims>(take<DDims>(delems...))
223+
>= DiscreteElement<DDims>(m_element_begin))
224+
&& ...);
225+
auto const test2
226+
= ((DiscreteElement<DDims>(take<DDims>(delems...))
227+
< DiscreteElement<DDims>(m_element_end))
228+
&& ...);
229+
// GCOVR_EXCL_BR_STOP
230+
return test1 && test2;
226231
}
227232

228233
template <class... DElems>

include/ddc/sparse_discrete_domain.hpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -279,12 +279,14 @@ class SparseDiscreteDomain
279279
sizeof...(DDims) == (0 + ... + DElems::size()),
280280
"Invalid number of dimensions");
281281
static_assert((is_discrete_element_v<DElems> && ...), "Expected DiscreteElements");
282+
// GCOVR_EXCL_BR_START
282283
return (detail::binary_search(
283284
get<DDims>(m_views).data(),
284285
get<DDims>(m_views).data() + get<DDims>(m_views).size(),
285286
uid<DDims>(take<DDims>(delems...)),
286287
std::less {})
287288
&& ...);
289+
// GCOVR_EXCL_BR_STOP
288290
}
289291

290292
template <class... DElems>

include/ddc/strided_discrete_domain.hpp

Lines changed: 14 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -220,22 +220,20 @@ class StridedDiscreteDomain
220220
sizeof...(DDims) == (0 + ... + DElems::size()),
221221
"Invalid number of dimensions");
222222
static_assert((is_discrete_element_v<DElems> && ...), "Expected DiscreteElements");
223-
auto const test1
224-
= ((DiscreteElement<DDims>(take<DDims>(delems...))
225-
>= DiscreteElement<DDims>(m_element_begin))
226-
&& ...);
227-
auto const test2
228-
= ((DiscreteElement<DDims>(take<DDims>(delems...))
229-
< (DiscreteElement<DDims>(m_element_begin)
230-
+ DiscreteVector<DDims>(m_extents) * DiscreteVector<DDims>(m_strides)))
231-
&& ...);
232-
auto const test3
233-
= ((((DiscreteElement<DDims>(take<DDims>(delems...))
234-
- DiscreteElement<DDims>(m_element_begin))
235-
% DiscreteVector<DDims>(m_strides))
236-
== 0)
237-
&& ...);
238-
return test1 && test2 && test3;
223+
auto const contains_1d = [](DiscreteElementType const i,
224+
DiscreteElementType const b,
225+
DiscreteVectorElement const n,
226+
DiscreteVectorElement const s) {
227+
return (i >= b) && (i < (b + (n - 1) * s + 1)) && ((i - b) % s == 0);
228+
};
229+
// GCOVR_EXCL_BR_START
230+
return (contains_1d(
231+
DiscreteElement<DDims>(take<DDims>(delems...)).uid(),
232+
DiscreteElement<DDims>(m_element_begin).uid(),
233+
DiscreteVector<DDims>(m_extents).value(),
234+
DiscreteVector<DDims>(m_strides).value())
235+
&& ...);
236+
// GCOVR_EXCL_BR_STOP
239237
}
240238

241239
template <class... DElems>

tests/discrete_domain.cpp

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -132,21 +132,38 @@ TEST(DiscreteDomainTest, CompareSameDomains)
132132
TEST(DiscreteDomainTest, CompareDifferentDomains)
133133
{
134134
DDomXY const dom_x_y_1(lbound_x_y + DVectXY(0, 1), DVectXY(1, 2));
135-
DDomXY const dom_x_y_2(lbound_x_y + DVectXY(2, 3), DVectXY(3, 4));
135+
DDomXY const dom_x_y_2(lbound_x_y + DVectXY(0, 1), DVectXY(3, 4));
136+
DDomXY const dom_x_y_3(lbound_x_y + DVectXY(2, 3), DVectXY(1, 2));
136137
EXPECT_FALSE(dom_x_y_1 == dom_x_y_2);
137138
EXPECT_FALSE(dom_x_y_1 == DDomYX(dom_x_y_2));
138139
EXPECT_TRUE(dom_x_y_1 != dom_x_y_2);
139140
EXPECT_TRUE(dom_x_y_1 != DDomYX(dom_x_y_2));
141+
142+
EXPECT_FALSE(dom_x_y_1 == dom_x_y_3);
143+
EXPECT_FALSE(dom_x_y_1 == DDomYX(dom_x_y_3));
144+
EXPECT_TRUE(dom_x_y_1 != dom_x_y_3);
145+
EXPECT_TRUE(dom_x_y_1 != DDomYX(dom_x_y_3));
146+
147+
EXPECT_FALSE(dom_x_y_2 == dom_x_y_3);
148+
EXPECT_FALSE(dom_x_y_2 == DDomYX(dom_x_y_3));
149+
EXPECT_TRUE(dom_x_y_2 != dom_x_y_3);
150+
EXPECT_TRUE(dom_x_y_2 != DDomYX(dom_x_y_3));
140151
}
141152

142153
TEST(DiscreteDomainTest, CompareEmptyDomains)
143154
{
144155
DDomXY const dom_x_y_1(lbound_x_y + DVectXY(4, 1), DVectXY(0, 0));
145156
DDomXY const dom_x_y_2(lbound_x_y + DVectXY(3, 9), DVectXY(0, 0));
157+
DDomXY const dom_x_y_3(lbound_x_y, nelems_x_y);
146158
EXPECT_TRUE(dom_x_y_1.empty());
147159
EXPECT_TRUE(dom_x_y_2.empty());
160+
EXPECT_FALSE(dom_x_y_3.empty());
161+
148162
EXPECT_TRUE(dom_x_y_1 == dom_x_y_2);
149163
EXPECT_FALSE(dom_x_y_1 != dom_x_y_2);
164+
165+
EXPECT_FALSE(dom_x_y_1 == dom_x_y_3);
166+
EXPECT_TRUE(dom_x_y_1 != dom_x_y_3);
150167
}
151168

152169
TEST(DiscreteDomainTest, Subdomain)
@@ -247,9 +264,10 @@ TEST(DiscreteDomainTest, Remove)
247264

248265
TEST(DiscreteDomainTest, Contains)
249266
{
250-
DDomXY const dom_x_y(lbound_x_y, nelems_x_y);
251-
EXPECT_TRUE(dom_x_y.contains(lbound_x_y));
252-
EXPECT_FALSE(dom_x_y.contains(lbound_x_y + nelems_x_y));
267+
DDomXY const dom_x_y(lbound_x_y + DVectXY(1, 1), nelems_x_y);
268+
EXPECT_TRUE(dom_x_y.contains(dom_x_y.front()));
269+
EXPECT_FALSE(dom_x_y.contains(dom_x_y.front() - DVectXY(1, 1)));
270+
EXPECT_FALSE(dom_x_y.contains(dom_x_y.back() + DVectXY(1, 1)));
253271
}
254272

255273
TEST(DiscreteDomainTest, DistanceFromFront)

tests/strided_discrete_domain.cpp

Lines changed: 29 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -137,21 +137,44 @@ TEST(StridedDiscreteDomainTest, CompareSameDomains)
137137
TEST(StridedDiscreteDomainTest, CompareDifferentDomains)
138138
{
139139
DDomXY const dom_x_y_1(lbound_x_y + DVectXY(0, 1), DVectXY(1, 2), strides_x_y);
140-
DDomXY const dom_x_y_2(lbound_x_y + DVectXY(2, 3), DVectXY(3, 4), strides_x_y);
140+
DDomXY const dom_x_y_2(lbound_x_y + DVectXY(0, 1), DVectXY(3, 4), strides_x_y);
141+
DDomXY const dom_x_y_3(lbound_x_y + DVectXY(2, 3), DVectXY(1, 2), strides_x_y);
142+
DDomXY const dom_x_y_4(lbound_x_y + DVectXY(2, 3), DVectXY(1, 2), DVectXY(1, 2));
141143
EXPECT_FALSE(dom_x_y_1 == dom_x_y_2);
142144
EXPECT_FALSE(dom_x_y_1 == DDomYX(dom_x_y_2));
143145
EXPECT_TRUE(dom_x_y_1 != dom_x_y_2);
144146
EXPECT_TRUE(dom_x_y_1 != DDomYX(dom_x_y_2));
147+
148+
EXPECT_FALSE(dom_x_y_1 == dom_x_y_3);
149+
EXPECT_FALSE(dom_x_y_1 == DDomYX(dom_x_y_3));
150+
EXPECT_TRUE(dom_x_y_1 != dom_x_y_3);
151+
EXPECT_TRUE(dom_x_y_1 != DDomYX(dom_x_y_3));
152+
153+
EXPECT_FALSE(dom_x_y_2 == dom_x_y_3);
154+
EXPECT_FALSE(dom_x_y_2 == DDomYX(dom_x_y_3));
155+
EXPECT_TRUE(dom_x_y_2 != dom_x_y_3);
156+
EXPECT_TRUE(dom_x_y_2 != DDomYX(dom_x_y_3));
157+
158+
EXPECT_FALSE(dom_x_y_3 == dom_x_y_4);
159+
EXPECT_FALSE(dom_x_y_3 == DDomYX(dom_x_y_4));
160+
EXPECT_TRUE(dom_x_y_3 != dom_x_y_4);
161+
EXPECT_TRUE(dom_x_y_3 != DDomYX(dom_x_y_4));
145162
}
146163

147164
TEST(StridedDiscreteDomainTest, CompareEmptyDomains)
148165
{
149166
DDomXY const dom_x_y_1(lbound_x_y + DVectXY(4, 1), DVectXY(0, 0), strides_x_y);
150167
DDomXY const dom_x_y_2(lbound_x_y + DVectXY(3, 9), DVectXY(0, 0), strides_x_y);
168+
DDomXY const dom_x_y_3(lbound_x_y, nelems_x_y, strides_x_y);
151169
EXPECT_TRUE(dom_x_y_1.empty());
152170
EXPECT_TRUE(dom_x_y_2.empty());
171+
EXPECT_FALSE(dom_x_y_3.empty());
172+
153173
EXPECT_TRUE(dom_x_y_1 == dom_x_y_2);
154174
EXPECT_FALSE(dom_x_y_1 != dom_x_y_2);
175+
176+
EXPECT_FALSE(dom_x_y_1 == dom_x_y_3);
177+
EXPECT_TRUE(dom_x_y_1 != dom_x_y_3);
155178
}
156179

157180
TEST(StridedDiscreteDomainTest, RangeFor)
@@ -247,9 +270,11 @@ TEST(StridedDiscreteDomainTest, Remove)
247270

248271
TEST(StridedDiscreteDomainTest, Contains)
249272
{
250-
DDomXY const dom_x_y(lbound_x_y, nelems_x_y, strides_x_y);
251-
EXPECT_TRUE(dom_x_y.contains(lbound_x_y));
252-
EXPECT_FALSE(dom_x_y.contains(lbound_x_y + DVectXY(1, 1)));
273+
DDomXY const dom_x_y(lbound_x_y + DVectXY(1, 1), nelems_x_y, strides_x_y);
274+
EXPECT_TRUE(dom_x_y.contains(dom_x_y.front()));
275+
EXPECT_FALSE(dom_x_y.contains(dom_x_y.front() - DVectXY(1, 1)));
276+
EXPECT_FALSE(dom_x_y.contains(dom_x_y.back() + DVectXY(1, 1)));
277+
EXPECT_FALSE(dom_x_y.contains(dom_x_y.front() + DVectXY(1, 1)));
253278
}
254279

255280
TEST(StridedDiscreteDomainTest, DistanceFromFront)

0 commit comments

Comments
 (0)