1 //===----------------------------------------------------------------------===//
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
7 //===----------------------------------------------------------------------===//
9 // UNSUPPORTED: c++03, c++11, c++14, c++17, c++20
13 // constexpr index_type stride(rank_type i) const noexcept;
15 // Constraints: extents_type::rank() > 0 is true.
17 // Preconditions: i < extents_type::rank() is true.
19 // Returns: extents().rev-prod-of-extents(i).
26 #include "test_macros.h"
28 template <class E
, class... Args
>
29 constexpr void test_stride(std::array
<typename
E::index_type
, E::rank()> strides
, Args
... args
) {
30 using M
= std::layout_right::mapping
<E
>;
33 ASSERT_NOEXCEPT(m
.stride(0));
34 for (size_t r
= 0; r
< E::rank(); r
++)
35 assert(strides
[r
] == m
.stride(r
));
38 constexpr bool test() {
39 constexpr size_t D
= std::dynamic_extent
;
40 test_stride
<std::extents
<unsigned, D
>>(std::array
<unsigned, 1>{1}, 7);
41 test_stride
<std::extents
<unsigned, 7>>(std::array
<unsigned, 1>{1});
42 test_stride
<std::extents
<unsigned, 7, 8>>(std::array
<unsigned, 2>{8, 1});
43 test_stride
<std::extents
<int64_t, D
, 8, D
, D
>>(std::array
<int64_t, 4>{720, 90, 10, 1}, 7, 9, 10);
47 int main(int, char**) {
49 static_assert(test());