|
| 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