Skip to content

Commit a2b2791

Browse files
committed
add device_views device test
1 parent 2b730b4 commit a2b2791

File tree

2 files changed

+54
-0
lines changed

2 files changed

+54
-0
lines changed

test/matrix/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ ginkgo_create_common_device_test(csr_kernels)
55
ginkgo_create_common_test(csr_kernels2)
66
ginkgo_create_common_test(coo_kernels)
77
ginkgo_create_common_test(dense_kernels)
8+
ginkgo_create_common_device_test(device_views)
89
ginkgo_create_common_test(diagonal_kernels)
910
ginkgo_create_common_test(ell_kernels)
1011
ginkgo_create_common_test(fbcsr_kernels DISABLE_EXECUTORS dpcpp)

test/matrix/device_views.cpp

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
// SPDX-FileCopyrightText: 2017 - 2026 The Ginkgo authors
2+
//
3+
// SPDX-License-Identifier: BSD-3-Clause
4+
5+
/*@GKO_PREPROCESSOR_FILENAME_HELPER@*/
6+
7+
#include <type_traits>
8+
9+
#include <gtest/gtest.h>
10+
11+
#include "common/unified/base/kernel_launch.hpp"
12+
#include "core/base/array_access.hpp"
13+
#include "core/test/utils.hpp"
14+
#include "test/utils/common_fixture.hpp"
15+
16+
17+
template <typename ValueType>
18+
class DenseView : public CommonTestFixture {
19+
public:
20+
using value_type = ValueType;
21+
using view_type = gko::matrix::view::dense<value_type>;
22+
};
23+
24+
TYPED_TEST_SUITE(DenseView, gko::test::ValueTypes, TypenameNameGenerator);
25+
26+
27+
template <typename ValueType>
28+
void assert_dense_view(std::shared_ptr<const gko::EXEC_TYPE> exec)
29+
{
30+
gko::array<bool> correct{exec, {false}};
31+
gko::array<ValueType> values{exec, 5};
32+
values.fill(gko::one<ValueType>());
33+
gko::kernels::GKO_DEVICE_NAMESPACE::run_kernel(
34+
exec,
35+
[] GKO_KERNEL(auto i, auto values, auto correct) {
36+
using device_type = std::decay_t<decltype(values[0])>;
37+
gko::matrix::view::dense<device_type> view{gko::dim<2>{1, 2}, 3,
38+
values};
39+
if (view.size == gko::dim<2>(1, 2) && view.stride == 3 &&
40+
view.data == values && &view(0, 0) == &values[0] &&
41+
&view(1, 0) == &values[3] && &view(1, 1) == &values[4] &&
42+
view(1, 1) == gko::one(view(1, 1))) {
43+
*correct = true;
44+
}
45+
},
46+
1, values, correct);
47+
ASSERT_TRUE(get_element(correct, 0));
48+
}
49+
50+
TYPED_TEST(DenseView, WorksOnDevice)
51+
{
52+
assert_dense_view<TypeParam>(this->exec);
53+
}

0 commit comments

Comments
 (0)