Skip to content

Commit

Permalink
add trait and test
Browse files Browse the repository at this point in the history
  • Loading branch information
fnrizzi committed Jun 8, 2023
1 parent e30f040 commit 98f9b4c
Show file tree
Hide file tree
Showing 5 changed files with 87 additions and 0 deletions.
3 changes: 3 additions & 0 deletions containers/src/Kokkos_DynRankView.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -375,6 +375,9 @@ template <class D, class... P>
struct is_dyn_rank_view<Kokkos::DynRankView<D, P...>> : public std::true_type {
};

template <class T>
inline constexpr bool is_dyn_rank_view_v = is_dyn_rank_view<T>::value;

template <typename DataType, class... Properties>
class DynRankView : public ViewTraits<DataType, Properties...> {
static_assert(!std::is_array<DataType>::value &&
Expand Down
3 changes: 3 additions & 0 deletions containers/src/Kokkos_OffsetView.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,9 @@ struct is_offset_view<OffsetView<D, P...>> : public std::true_type {};
template <class D, class... P>
struct is_offset_view<const OffsetView<D, P...>> : public std::true_type {};

template <class T>
inline constexpr bool is_offset_view_v = is_offset_view<T>::value;

#define KOKKOS_INVALID_OFFSET int64_t(0x7FFFFFFFFFFFFFFFLL)
#define KOKKOS_INVALID_INDEX_RANGE \
{ KOKKOS_INVALID_OFFSET, KOKKOS_INVALID_OFFSET }
Expand Down
12 changes: 12 additions & 0 deletions containers/src/Kokkos_ScatterView.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -663,6 +663,18 @@ template <typename DataType,
typename DeviceType::execution_space, Duplication>::type>
class ScatterView;

template <class>
struct is_scatter_view : public std::false_type {};

template <class D, class... P>
struct is_scatter_view<ScatterView<D, P...>> : public std::true_type {};

template <class D, class... P>
struct is_scatter_view<const ScatterView<D, P...>> : public std::true_type {};

template <class T>
inline constexpr bool is_scatter_view_v = is_scatter_view<T>::value;

template <typename DataType, typename Op, typename DeviceType, typename Layout,
typename Duplication, typename Contribution,
typename OverrideContribution>
Expand Down
1 change: 1 addition & 0 deletions containers/unit_tests/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,7 @@ endforeach()
SET(COMPILE_ONLY_SOURCES
TestCreateMirror.cpp
TestDualViewParameterPack.cpp
TestIsViewTrait.cpp
)
KOKKOS_ADD_EXECUTABLE(
ContainersTestCompileOnly
Expand Down
68 changes: 68 additions & 0 deletions containers/unit_tests/TestIsViewTrait.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
//@HEADER
// ************************************************************************
//
// Kokkos v. 4.0
// Copyright (2022) National Technology & Engineering
// Solutions of Sandia, LLC (NTESS).
//
// Under the terms of Contract DE-NA0003525 with NTESS,
// the U.S. Government retains certain rights in this software.
//
// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions.
// See https://kokkos.org/LICENSE for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//@HEADER

#include <Kokkos_Core.hpp>
#include <Kokkos_DualView.hpp>
#include <Kokkos_DynRankView.hpp>
#include <Kokkos_DynamicView.hpp>
#include <Kokkos_OffsetView.hpp>
#include <Kokkos_ScatterView.hpp>

namespace {

using view_t = Kokkos::View<int*>;
using dual_view_t = Kokkos::DualView<int*>;
using dyn_rank_view_t = Kokkos::DynRankView<int*>;
using dynamic_view_t = Kokkos::Experimental::DynamicView<int*>;
using offset_view_t = Kokkos::Experimental::OffsetView<int*>;
using scatter_view_t = Kokkos::Experimental::ScatterView<int*>;

static_assert(Kokkos::is_dual_view_v<dual_view_t>);
static_assert(!Kokkos::is_dyn_rank_view_v<dual_view_t>);
static_assert(!Kokkos::is_dynamic_view_v<dual_view_t>);
static_assert(!Kokkos::Experimental::is_offset_view_v<dual_view_t>);
static_assert(!Kokkos::Experimental::is_scatter_view_v<dual_view_t>);
static_assert(!Kokkos::is_view_v<dual_view_t>);

static_assert(!Kokkos::is_dual_view_v<dyn_rank_view_t>);
static_assert(Kokkos::is_dyn_rank_view_v<dyn_rank_view_t>);
static_assert(!Kokkos::is_dynamic_view_v<dyn_rank_view_t>);
static_assert(!Kokkos::Experimental::is_offset_view_v<dyn_rank_view_t>);
static_assert(!Kokkos::Experimental::is_scatter_view_v<dyn_rank_view_t>);
static_assert(!Kokkos::is_view_v<dyn_rank_view_t>);

static_assert(!Kokkos::is_dual_view_v<dynamic_view_t>);
static_assert(!Kokkos::is_dyn_rank_view_v<dynamic_view_t>);
static_assert(Kokkos::is_dynamic_view_v<dynamic_view_t>);
static_assert(!Kokkos::Experimental::is_offset_view_v<dynamic_view_t>);
static_assert(!Kokkos::Experimental::is_scatter_view_v<dynamic_view_t>);
static_assert(!Kokkos::is_view_v<dynamic_view_t>);

static_assert(!Kokkos::is_dual_view_v<offset_view_t>);
static_assert(!Kokkos::is_dyn_rank_view_v<offset_view_t>);
static_assert(!Kokkos::is_dynamic_view_v<offset_view_t>);
static_assert(Kokkos::Experimental::is_offset_view_v<offset_view_t>);
static_assert(!Kokkos::Experimental::is_scatter_view_v<offset_view_t>);
static_assert(!Kokkos::is_view_v<offset_view_t>);

static_assert(!Kokkos::is_dual_view_v<scatter_view_t>);
static_assert(!Kokkos::is_dyn_rank_view_v<scatter_view_t>);
static_assert(!Kokkos::is_dynamic_view_v<scatter_view_t>);
static_assert(!Kokkos::Experimental::is_offset_view_v<scatter_view_t>);
static_assert(Kokkos::Experimental::is_scatter_view_v<scatter_view_t>);
static_assert(!Kokkos::is_view_v<scatter_view_t>);

} // namespace

0 comments on commit 98f9b4c

Please sign in to comment.