xref: /llvm-project/libcxx/test/std/containers/views/mdspan/layout_right/properties.pass.cpp (revision e99c4906e44ae3f921fa05356909d006cda8d954)
1 //===----------------------------------------------------------------------===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 
9 // UNSUPPORTED: c++03, c++11, c++14, c++17, c++20
10 
11 // <mdspan>
12 
13 // namespace std {
14 //   template<class Extents>
15 //   class layout_right::mapping {
16 //
17 //     ...
18 //     static constexpr bool is_always_unique() noexcept { return true; }
19 //     static constexpr bool is_always_exhaustive() noexcept { return true; }
20 //     static constexpr bool is_always_strided() noexcept { return true; }
21 //
22 //     static constexpr bool is_unique() noexcept { return true; }
23 //     static constexpr bool is_exhaustive() noexcept { return true; }
24 //     static constexpr bool is_strided() noexcept { return true; }
25 //     ...
26 //   };
27 // }
28 
29 #include <cassert>
30 #include <cstddef>
31 #include <mdspan>
32 #include <span> // dynamic_extent
33 #include <utility>
34 
35 #include "test_macros.h"
36 
37 template <class E>
38 constexpr void test_layout_mapping_right() {
39   using M = std::layout_right::mapping<E>;
40   assert(M::is_unique() == true);
41   assert(M::is_exhaustive() == true);
42   assert(M::is_strided() == true);
43   assert(M::is_always_unique() == true);
44   assert(M::is_always_exhaustive() == true);
45   assert(M::is_always_strided() == true);
46   ASSERT_NOEXCEPT(std::declval<M>().is_unique());
47   ASSERT_NOEXCEPT(std::declval<M>().is_exhaustive());
48   ASSERT_NOEXCEPT(std::declval<M>().is_strided());
49   ASSERT_NOEXCEPT(M::is_always_unique());
50   ASSERT_NOEXCEPT(M::is_always_exhaustive());
51   ASSERT_NOEXCEPT(M::is_always_strided());
52 }
53 
54 constexpr bool test() {
55   constexpr size_t D = std::dynamic_extent;
56   test_layout_mapping_right<std::extents<int>>();
57   test_layout_mapping_right<std::extents<signed char, 4, 5>>();
58   test_layout_mapping_right<std::extents<unsigned, D, 4>>();
59   test_layout_mapping_right<std::extents<size_t, D, D, D, D>>();
60   return true;
61 }
62 
63 int main(int, char**) {
64   test();
65   static_assert(test());
66   return 0;
67 }
68