Files
clang-p2996/libcxx/test/std/containers/views/mdspan/layout_left/stride.pass.cpp
Louis Dionne 5e19fd1720 [libc++][modules] Consolidate leaf modules into their own top-level modules (#107147)
Some modules are leaf modules in the sense that they are not used by any
other part of the headers. These leaf modules are easy to consolidate
since there is no risk to create a cycle. As a result of regrouping
these modules, several missing includes were found and fixed in this
patch.
2024-09-04 16:39:55 -04:00

54 lines
1.6 KiB
C++

//===----------------------------------------------------------------------===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
// UNSUPPORTED: c++03, c++11, c++14, c++17, c++20
// <mdspan>
// constexpr index_type stride(rank_type i) const noexcept;
//
// Constraints: extents_type::rank() > 0 is true.
//
// Preconditions: i < extents_type::rank() is true.
//
// Returns: extents().rev-prod-of-extents(i).
#include <mdspan>
#include <array>
#include <cassert>
#include <cstdint>
#include <cstdio>
#include <span> // dynamic_extent
#include "test_macros.h"
template <class E, class... Args>
constexpr void test_stride(std::array<typename E::index_type, E::rank()> strides, Args... args) {
using M = std::layout_left::mapping<E>;
M m(E(args...));
ASSERT_NOEXCEPT(m.stride(0));
for (size_t r = 0; r < E::rank(); r++)
assert(strides[r] == m.stride(r));
}
constexpr bool test() {
constexpr size_t D = std::dynamic_extent;
test_stride<std::extents<unsigned, D>>(std::array<unsigned, 1>{1}, 7);
test_stride<std::extents<unsigned, 7>>(std::array<unsigned, 1>{1});
test_stride<std::extents<unsigned, 7, 8>>(std::array<unsigned, 2>{1, 7});
test_stride<std::extents<int64_t, D, 8, D, D>>(std::array<int64_t, 4>{1, 7, 56, 504}, 7, 9, 10);
return true;
}
int main(int, char**) {
test();
static_assert(test());
return 0;
}