[libc++][span][test] Various cleanups for <span> tests#202319
Open
eiytoq wants to merge 4 commits into
Open
Conversation
|
@llvm/pr-subscribers-libcxx Author: eiytoq (eiytoq) ChangesThis patch does:
Patch is 92.40 KiB, truncated to 20.00 KiB below, full version: https://github.com/llvm/llvm-project/pull/202319.diff 36 Files Affected:
diff --git a/libcxx/test/std/containers/views/views.span/enable_borrowed_range.compile.pass.cpp b/libcxx/test/std/containers/views/views.span/enable_borrowed_range.compile.pass.cpp
index 6468d66ab34eb..3b86f6e22b247 100644
--- a/libcxx/test/std/containers/views/views.span/enable_borrowed_range.compile.pass.cpp
+++ b/libcxx/test/std/containers/views/views.span/enable_borrowed_range.compile.pass.cpp
@@ -6,22 +6,21 @@
//
//===----------------------------------------------------------------------===//
-// UNSUPPORTED: c++03, c++11, c++14, c++17
+// REQUIRES: std-at-least-c++20
// <span>
// template<class ElementType, size_t Extent>
-// inline constexpr bool ranges::enable_borrowed_range<
-// span<ElementType, Extent>> = true;
+// constexpr bool ranges::enable_borrowed_range<span<ElementType, Extent>> = true;
#include <span>
#include "test_macros.h"
void test() {
- static_assert(std::ranges::enable_borrowed_range<std::span<int, 0> >);
- static_assert(std::ranges::enable_borrowed_range<std::span<int, 42> >);
- static_assert(std::ranges::enable_borrowed_range<std::span<int, std::dynamic_extent> >);
+ static_assert(std::ranges::enable_borrowed_range<std::span<int, 0>>);
+ static_assert(std::ranges::enable_borrowed_range<std::span<int, 42>>);
+ static_assert(std::ranges::enable_borrowed_range<std::span<int, std::dynamic_extent>>);
static_assert(!std::ranges::enable_borrowed_range<std::span<int, 42>&>);
static_assert(!std::ranges::enable_borrowed_range<std::span<int, 42> const>);
}
diff --git a/libcxx/test/std/containers/views/views.span/range_concept_conformance.compile.pass.cpp b/libcxx/test/std/containers/views/views.span/range_concept_conformance.compile.pass.cpp
index 52f0a76dfd2ce..cb2e7ce95ed52 100644
--- a/libcxx/test/std/containers/views/views.span/range_concept_conformance.compile.pass.cpp
+++ b/libcxx/test/std/containers/views/views.span/range_concept_conformance.compile.pass.cpp
@@ -6,9 +6,9 @@
//
//===----------------------------------------------------------------------===//
-// UNSUPPORTED: c++03, c++11, c++14, c++17
+// REQUIRES: std-at-least-c++20
-// span
+// <span>
#include <span>
diff --git a/libcxx/test/std/containers/views/views.span/span.cons/array.pass.cpp b/libcxx/test/std/containers/views/views.span/span.cons/array.pass.cpp
index 6e40aef8521ea..cbc51f476c543 100644
--- a/libcxx/test/std/containers/views/views.span/span.cons/array.pass.cpp
+++ b/libcxx/test/std/containers/views/views.span/span.cons/array.pass.cpp
@@ -5,17 +5,16 @@
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
-// UNSUPPORTED: c++03, c++11, c++14, c++17
+
+// REQUIRES: std-at-least-c++20
// <span>
-// template<size_t N>
-// constexpr span(element_type (&arr)[N]) noexcept;
+// template<size_t N> constexpr span(type_identity_t<element_type> (&arr)[N]) noexcept;
//
-// Remarks: These constructors shall not participate in overload resolution unless:
+// Constraints: Let U be remove_pointer_t<decltype(std::data(arr))>.
// - extent == dynamic_extent || N == extent is true, and
-// - remove_pointer_t<decltype(data(arr))>(*)[] is convertible to ElementType(*)[].
-//
+// - is_convertible_v<U(*)[], element_type(*)[]> is true.
#include <cassert>
#include <span>
@@ -30,40 +29,40 @@ void checkCV() {
volatile int varr[] = {7, 8, 9};
const volatile int cvarr[] = {1, 3, 5};
- // Types the same (dynamic sized)
+ // Types the same (dynamic sized)
{
- std::span< int> s1{arr}; // a span< int> pointing at int.
- std::span<const int> s2{carr}; // a span<const int> pointing at const int.
- std::span< volatile int> s3{varr}; // a span< volatile int> pointing at volatile int.
+ std::span<int> s1{arr}; // a span<int> pointing at int.
+ std::span<const int> s2{carr}; // a span<const int> pointing at const int.
+ std::span<volatile int> s3{varr}; // a span<volatile int> pointing at volatile int.
std::span<const volatile int> s4{cvarr}; // a span<const volatile int> pointing at const volatile int.
assert(s1.size() + s2.size() + s3.size() + s4.size() == 12);
}
- // Types the same (static sized)
+ // Types the same (static sized)
{
- std::span< int, 3> s1{arr}; // a span< int> pointing at int.
- std::span<const int, 3> s2{carr}; // a span<const int> pointing at const int.
- std::span< volatile int, 3> s3{varr}; // a span< volatile int> pointing at volatile int.
+ std::span<int, 3> s1{arr}; // a span<int> pointing at int.
+ std::span<const int, 3> s2{carr}; // a span<const int> pointing at const int.
+ std::span<volatile int, 3> s3{varr}; // a span<volatile int> pointing at volatile int.
std::span<const volatile int, 3> s4{cvarr}; // a span<const volatile int> pointing at const volatile int.
assert(s1.size() + s2.size() + s3.size() + s4.size() == 12);
}
- // types different (dynamic sized)
+ // types different (dynamic sized)
{
- std::span<const int> s1{arr}; // a span<const int> pointing at int.
- std::span< volatile int> s2{arr}; // a span< volatile int> pointing at int.
- std::span< volatile int> s3{arr}; // a span< volatile int> pointing at const int.
+ std::span<const int> s1{arr}; // a span<const int> pointing at int.
+ std::span<volatile int> s2{arr}; // a span<volatile int> pointing at int.
+ std::span<volatile int> s3{arr}; // a span<volatile int> pointing at const int.
std::span<const volatile int> s4{arr}; // a span<const volatile int> pointing at int.
std::span<const volatile int> s5{carr}; // a span<const volatile int> pointing at const int.
std::span<const volatile int> s6{varr}; // a span<const volatile int> pointing at volatile int.
assert(s1.size() + s2.size() + s3.size() + s4.size() + s5.size() + s6.size() == 18);
}
- // types different (static sized)
+ // types different (static sized)
{
- std::span<const int, 3> s1{arr}; // a span<const int> pointing at int.
- std::span< volatile int, 3> s2{arr}; // a span< volatile int> pointing at int.
- std::span< volatile int, 3> s3{arr}; // a span< volatile int> pointing at const int.
+ std::span<const int, 3> s1{arr}; // a span<const int> pointing at int.
+ std::span<volatile int, 3> s2{arr}; // a span<volatile int> pointing at int.
+ std::span<volatile int, 3> s3{arr}; // a span<volatile int> pointing at const int.
std::span<const volatile int, 3> s4{arr}; // a span<const volatile int> pointing at int.
std::span<const volatile int, 3> s5{carr}; // a span<const volatile int> pointing at const int.
std::span<const volatile int, 3> s6{varr}; // a span<const volatile int> pointing at volatile int.
@@ -102,7 +101,7 @@ constexpr bool testSpan() {
struct A {};
-int main(int, char**) {
+int main() {
testSpan<int>();
testSpan<double>();
testSpan<A>();
@@ -116,39 +115,39 @@ int main(int, char**) {
// Size wrong
{
- static_assert(!std::is_constructible<std::span<int, 2>, int(&)[3]>::value, "");
+ static_assert(!std::is_constructible_v<std::span<int, 2>, int(&)[3]>);
}
// Type wrong
{
- static_assert(!std::is_constructible<std::span<float>, int(&)[3]>::value, "");
- static_assert(!std::is_constructible<std::span<float, 3>, int(&)[3]>::value, "");
+ static_assert(!std::is_constructible_v<std::span<float>, int(&)[3]>);
+ static_assert(!std::is_constructible_v<std::span<float, 3>, int(&)[3]>);
}
// CV wrong (dynamically sized)
{
- static_assert(!std::is_constructible<std::span<int>, const int(&)[3]>::value, "");
- static_assert(!std::is_constructible<std::span<int>, volatile int(&)[3]>::value, "");
- static_assert(!std::is_constructible<std::span<int>, const volatile int(&)[3]>::value, "");
+ static_assert(!std::is_constructible_v<std::span<int>, const int(&)[3]>);
+ static_assert(!std::is_constructible_v<std::span<int>, volatile int(&)[3]>);
+ static_assert(!std::is_constructible_v<std::span<int>, const volatile int(&)[3]>);
- static_assert(!std::is_constructible<std::span<const int>, volatile int(&)[3]>::value, "");
- static_assert(!std::is_constructible<std::span<const int>, const volatile int(&)[3]>::value, "");
+ static_assert(!std::is_constructible_v<std::span<const int>, volatile int(&)[3]>);
+ static_assert(!std::is_constructible_v<std::span<const int>, const volatile int(&)[3]>);
- static_assert(!std::is_constructible<std::span<volatile int>, const int(&)[3]>::value, "");
- static_assert(!std::is_constructible<std::span<volatile int>, const volatile int(&)[3]>::value, "");
+ static_assert(!std::is_constructible_v<std::span<volatile int>, const int(&)[3]>);
+ static_assert(!std::is_constructible_v<std::span<volatile int>, const volatile int(&)[3]>);
}
// CV wrong (statically sized)
{
- static_assert(!std::is_constructible<std::span<int, 3>, const int(&)[3]>::value, "");
- static_assert(!std::is_constructible<std::span<int, 3>, volatile int(&)[3]>::value, "");
- static_assert(!std::is_constructible<std::span<int, 3>, const volatile int(&)[3]>::value, "");
+ static_assert(!std::is_constructible_v<std::span<int, 3>, const int(&)[3]>);
+ static_assert(!std::is_constructible_v<std::span<int, 3>, volatile int(&)[3]>);
+ static_assert(!std::is_constructible_v<std::span<int, 3>, const volatile int(&)[3]>);
- static_assert(!std::is_constructible<std::span<const int, 3>, volatile int(&)[3]>::value, "");
- static_assert(!std::is_constructible<std::span<const int, 3>, const volatile int(&)[3]>::value, "");
+ static_assert(!std::is_constructible_v<std::span<const int, 3>, volatile int(&)[3]>);
+ static_assert(!std::is_constructible_v<std::span<const int, 3>, const volatile int(&)[3]>);
- static_assert(!std::is_constructible<std::span<volatile int, 3>, const int(&)[3]>::value, "");
- static_assert(!std::is_constructible<std::span<volatile int, 3>, const volatile int(&)[3]>::value, "");
+ static_assert(!std::is_constructible_v<std::span<volatile int, 3>, const int(&)[3]>);
+ static_assert(!std::is_constructible_v<std::span<volatile int, 3>, const volatile int(&)[3]>);
}
return 0;
diff --git a/libcxx/test/std/containers/views/views.span/span.cons/assign.pass.cpp b/libcxx/test/std/containers/views/views.span/span.cons/assign.pass.cpp
index dcbf0fb36d858..4b313faac235b 100644
--- a/libcxx/test/std/containers/views/views.span/span.cons/assign.pass.cpp
+++ b/libcxx/test/std/containers/views/views.span/span.cons/assign.pass.cpp
@@ -5,11 +5,12 @@
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
-// UNSUPPORTED: c++03, c++11, c++14, c++17
+
+// REQUIRES: std-at-least-c++20
// <span>
-// constexpr span& operator=(const span& other) noexcept = default;
+// constexpr span& operator=(const span& other) noexcept = default;
#include <span>
#include <cassert>
@@ -26,15 +27,13 @@ constexpr bool doAssign(T lhs, T rhs) {
return lhs.data() == rhs.data() && lhs.size() == rhs.size();
}
-struct A {};
-
constexpr int carr1[] = {1, 2, 3, 4};
constexpr int carr2[] = {3, 4, 5};
constexpr int carr3[] = {7, 8};
int arr[] = {5, 6, 7, 9};
std::string strs[] = {"ABC", "DEF", "GHI"};
-int main(int, char**) {
+int main() {
// constexpr dynamically sized assignment
{
// On systems where 'ptrdiff_t' is a synonym for 'int',
@@ -63,118 +62,118 @@ int main(int, char**) {
{carr3, 1U},
{carr3, 2U}};
- static_assert(std::size(spans) == 13, "");
+ static_assert(std::size(spans) == 13);
// No for loops in constexpr land :-(
- static_assert(doAssign(spans[0], spans[0]), "");
- static_assert(doAssign(spans[0], spans[1]), "");
- static_assert(doAssign(spans[0], spans[2]), "");
- static_assert(doAssign(spans[0], spans[3]), "");
- static_assert(doAssign(spans[0], spans[4]), "");
- static_assert(doAssign(spans[0], spans[5]), "");
- static_assert(doAssign(spans[0], spans[6]), "");
- static_assert(doAssign(spans[0], spans[7]), "");
- static_assert(doAssign(spans[0], spans[8]), "");
- static_assert(doAssign(spans[0], spans[9]), "");
- static_assert(doAssign(spans[0], spans[10]), "");
- static_assert(doAssign(spans[0], spans[11]), "");
- static_assert(doAssign(spans[0], spans[12]), "");
-
- static_assert(doAssign(spans[1], spans[1]), "");
- static_assert(doAssign(spans[1], spans[2]), "");
- static_assert(doAssign(spans[1], spans[3]), "");
- static_assert(doAssign(spans[1], spans[4]), "");
- static_assert(doAssign(spans[1], spans[5]), "");
- static_assert(doAssign(spans[1], spans[6]), "");
- static_assert(doAssign(spans[1], spans[7]), "");
- static_assert(doAssign(spans[1], spans[8]), "");
- static_assert(doAssign(spans[1], spans[9]), "");
- static_assert(doAssign(spans[1], spans[10]), "");
- static_assert(doAssign(spans[1], spans[11]), "");
- static_assert(doAssign(spans[1], spans[12]), "");
-
- static_assert(doAssign(spans[2], spans[2]), "");
- static_assert(doAssign(spans[2], spans[3]), "");
- static_assert(doAssign(spans[2], spans[4]), "");
- static_assert(doAssign(spans[2], spans[5]), "");
- static_assert(doAssign(spans[2], spans[6]), "");
- static_assert(doAssign(spans[2], spans[7]), "");
- static_assert(doAssign(spans[2], spans[8]), "");
- static_assert(doAssign(spans[2], spans[9]), "");
- static_assert(doAssign(spans[2], spans[10]), "");
- static_assert(doAssign(spans[2], spans[11]), "");
- static_assert(doAssign(spans[2], spans[12]), "");
-
- static_assert(doAssign(spans[3], spans[3]), "");
- static_assert(doAssign(spans[3], spans[4]), "");
- static_assert(doAssign(spans[3], spans[4]), "");
- static_assert(doAssign(spans[3], spans[4]), "");
- static_assert(doAssign(spans[3], spans[4]), "");
- static_assert(doAssign(spans[3], spans[4]), "");
- static_assert(doAssign(spans[3], spans[4]), "");
- static_assert(doAssign(spans[3], spans[4]), "");
- static_assert(doAssign(spans[3], spans[4]), "");
- static_assert(doAssign(spans[3], spans[10]), "");
- static_assert(doAssign(spans[3], spans[11]), "");
- static_assert(doAssign(spans[3], spans[12]), "");
-
- static_assert(doAssign(spans[4], spans[4]), "");
- static_assert(doAssign(spans[4], spans[5]), "");
- static_assert(doAssign(spans[4], spans[6]), "");
- static_assert(doAssign(spans[4], spans[7]), "");
- static_assert(doAssign(spans[4], spans[8]), "");
- static_assert(doAssign(spans[4], spans[9]), "");
- static_assert(doAssign(spans[4], spans[10]), "");
- static_assert(doAssign(spans[4], spans[11]), "");
- static_assert(doAssign(spans[4], spans[12]), "");
-
- static_assert(doAssign(spans[5], spans[5]), "");
- static_assert(doAssign(spans[5], spans[6]), "");
- static_assert(doAssign(spans[5], spans[7]), "");
- static_assert(doAssign(spans[5], spans[8]), "");
- static_assert(doAssign(spans[5], spans[9]), "");
- static_assert(doAssign(spans[5], spans[10]), "");
- static_assert(doAssign(spans[5], spans[11]), "");
- static_assert(doAssign(spans[5], spans[12]), "");
-
- static_assert(doAssign(spans[6], spans[6]), "");
- static_assert(doAssign(spans[6], spans[7]), "");
- static_assert(doAssign(spans[6], spans[8]), "");
- static_assert(doAssign(spans[6], spans[9]), "");
- static_assert(doAssign(spans[6], spans[10]), "");
- static_assert(doAssign(spans[6], spans[11]), "");
- static_assert(doAssign(spans[6], spans[12]), "");
-
- static_assert(doAssign(spans[7], spans[7]), "");
- static_assert(doAssign(spans[7], spans[8]), "");
- static_assert(doAssign(spans[7], spans[9]), "");
- static_assert(doAssign(spans[7], spans[10]), "");
- static_assert(doAssign(spans[7], spans[11]), "");
- static_assert(doAssign(spans[7], spans[12]), "");
-
- static_assert(doAssign(spans[8], spans[8]), "");
- static_assert(doAssign(spans[8], spans[9]), "");
- static_assert(doAssign(spans[8], spans[10]), "");
- static_assert(doAssign(spans[8], spans[11]), "");
- static_assert(doAssign(spans[8], spans[12]), "");
-
- static_assert(doAssign(spans[9], spans[9]), "");
- static_assert(doAssign(spans[9], spans[10]), "");
- static_assert(doAssign(spans[9], spans[11]), "");
- static_assert(doAssign(spans[9], spans[12]), "");
-
- static_assert(doAssign(spans[10], spans[10]), "");
- static_assert(doAssign(spans[10], spans[11]), "");
- static_assert(doAssign(spans[10], spans[12]), "");
-
- static_assert(doAssign(spans[11], spans[11]), "");
- static_assert(doAssign(spans[11], spans[12]), "");
-
- static_assert(doAssign(spans[12], spans[12]), "");
+ static_assert(doAssign(spans[0], spans[0]));
+ static_assert(doAssign(spans[0], spans[1]));
+ static_assert(doAssign(spans[0], spans[2]));
+ static_assert(doAssign(spans[0], spans[3]));
+ static_assert(doAssign(spans[0], spans[4]));
+ static_assert(doAssign(spans[0], spans[5]));
+ static_assert(doAssign(spans[0], spans[6]));
+ static_assert(doAssign(spans[0], spans[7]));
+ static_assert(doAssign(spans[0], spans[8]));
+ static_assert(doAssign(spans[0], spans[9]));
+ static_assert(doAssign(spans[0], spans[10]));
+ static_assert(doAssign(spans[0], spans[11]));
+ static_assert(doAssign(spans[0], spans[12]));
+
+ static_assert(doAssign(spans[1], spans[1]));
+ static_assert(doAssign(spans[1], spans[2]));
+ static_assert(doAssign(spans[1], spans[3]));
+ static_assert(doAssign(spans[1], spans[4]));
+ static_assert(doAssign(spans[1], spans[5]));
+ static_assert(doAssign(spans[1], spans[6]));
+ static_assert(doAssign(spans[1], spans[7]));
+ static_assert(doAssign(spans[1], spans[8]));
+ static_assert(doAssign(spans[1], spans[9]));
+ static_assert(doAssign(spans[1], spans[10]));
+ static_assert(doAssign(spans[1], spans[11]));
+ static_assert(doAssign(spans[1], spans[12]));
+
+ static_assert(doAssign(spans[2], spans[2]));
+ static_assert(doAssign(spans[2], spans[3]));
+ static_assert(doAssign(spans[2], spans[4]));
+ static_assert(doAssign(spans[2], spans[5]));
+ static_assert(doAssign(spans[2], spans[6]));
+ static_assert(doAssign(spans[2], spans[7]));
+ static_assert(doAssign(spans[2], spans[8]));
+ static_assert(doAssign(spans[2], spans[9]));
+ static_assert(doAssign(spans[2], spans[10]));
+ static_assert(doAssign(spans[2], spans[11]));
+ static_assert(doAssign(spans[2], spans[12]));
+
+ static_assert(doAssign(spans[3], spans[3]));
+ static_assert(doAssign(spans[3], spans[4]));
+ static_assert(doAssign(spans[3], spans[4]));
+ static_assert(doAssign(spans[3], spans[4]));
+ static_assert(doAssign(spans[3], spans[4]));
+ static_assert(doAssign(spans[3], spans[4]));
+ static_assert(doAssign(spans[3], spans[4]));
+ static_assert(doAssign(spans[3], spans[4]));
+ static_assert(doAssign(spans[3], spans[4]));
+ static_assert(doAssign(spans[3], spans[10]));
+ static_assert(doAssign(spans[3], spans[11]));
+ static_assert(doAssign(spans[3], spans[12]));
+
+ static_assert(doAssign(spans[4], spans[4]));
+ static_assert(doAssign(spans[4], spans[5]));
+ static_assert(doAssign(spans[4], spans[6]));
+ static_assert(doAssign(spans[4], spans[7]));
+ static_assert(doAssign(spans[4], spans[8]));
+ static_assert(doAssign(spans[4], spans[9]));
+ static_assert(doAssign(spans[4], spans[10]));
+ static_assert(doAssign(spans[4], spans[11]));
+ static_assert(doAssign(spans[4], spans[12]));
+
+ static_assert(doAssign(spans[5], spans[5]));
+ static_assert(doAssign(spans[5], spans[6]));
+ static_assert(doAssign(spans[5], spans[7]));
+ static_assert(doAssign(spans[5], spans[8]));
+ static_assert(doAssign(spans[5], spans[9]));
+ static_assert(doAssign(spans[5], spans[10]));
+ static_assert(doAssign(spans[5], spans[11]));
+ static_assert(doAssign(spans[5], spans[12]));
+
+ ...
[truncated]
|
|
✅ With the latest revision this PR passed the C/C++ code formatter. |
frederick-vs-ja
requested changes
Jun 8, 2026
frederick-vs-ja
approved these changes
Jun 8, 2026
Contributor
frederick-vs-ja
left a comment
There was a problem hiding this comment.
LGTM. The CI failure was unrelated.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This patch does: