Skip to content

[libc++][span][test] Various cleanups for <span> tests#202319

Merged
eiytoq merged 4 commits into
llvm:mainfrom
eiytoq:test/span
Jun 9, 2026
Merged

[libc++][span][test] Various cleanups for <span> tests#202319
eiytoq merged 4 commits into
llvm:mainfrom
eiytoq:test/span

Conversation

@eiytoq

@eiytoq eiytoq commented Jun 8, 2026

Copy link
Copy Markdown
Contributor

This patch does:

  • Simplify some test implementations
  • Polish comments and synopsis

@eiytoq eiytoq requested a review from frederick-vs-ja June 8, 2026 11:04
@eiytoq eiytoq requested a review from a team as a code owner June 8, 2026 11:04
@llvmorg-github-actions llvmorg-github-actions Bot added the libc++ libc++ C++ Standard Library. Not GNU libstdc++. Not libc++abi. label Jun 8, 2026
@llvmorg-github-actions

Copy link
Copy Markdown

@llvm/pr-subscribers-libcxx

Author: eiytoq (eiytoq)

Changes

This patch does:

  • Simplify some test implementations
  • Polish comments and synopsis

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:

  • (modified) libcxx/test/std/containers/views/views.span/enable_borrowed_range.compile.pass.cpp (+5-6)
  • (modified) libcxx/test/std/containers/views/views.span/range_concept_conformance.compile.pass.cpp (+2-2)
  • (modified) libcxx/test/std/containers/views/views.span/span.cons/array.pass.cpp (+39-40)
  • (modified) libcxx/test/std/containers/views/views.span/span.cons/assign.pass.cpp (+134-135)
  • (modified) libcxx/test/std/containers/views/views.span/span.cons/copy.pass.cpp (+3-3)
  • (modified) libcxx/test/std/containers/views/views.span/span.cons/deduct.pass.cpp (+16-16)
  • (modified) libcxx/test/std/containers/views/views.span/span.cons/default.pass.cpp (+10-9)
  • (modified) libcxx/test/std/containers/views/views.span/span.cons/initializer_list.pass.cpp (+2-3)
  • (modified) libcxx/test/std/containers/views/views.span/span.cons/iterator_len.pass.cpp (+7-5)
  • (modified) libcxx/test/std/containers/views/views.span/span.cons/iterator_len.verify.cpp (+14-4)
  • (modified) libcxx/test/std/containers/views/views.span/span.cons/iterator_sentinel.pass.cpp (+20-14)
  • (modified) libcxx/test/std/containers/views/views.span/span.cons/iterator_sentinel.verify.cpp (+9-5)
  • (modified) libcxx/test/std/containers/views/views.span/span.cons/range.pass.cpp (+5-4)
  • (modified) libcxx/test/std/containers/views/views.span/span.cons/span.dtor.compile.pass.cpp (+2-1)
  • (modified) libcxx/test/std/containers/views/views.span/span.cons/span.pass.cpp (+7-6)
  • (modified) libcxx/test/std/containers/views/views.span/span.cons/span.verify.cpp (+31-31)
  • (modified) libcxx/test/std/containers/views/views.span/span.cons/stdarray.pass.cpp (+22-25)
  • (modified) libcxx/test/std/containers/views/views.span/span.elem/at.pass.cpp (+1-1)
  • (modified) libcxx/test/std/containers/views/views.span/span.elem/back.pass.cpp (+20-14)
  • (modified) libcxx/test/std/containers/views/views.span/span.elem/data.pass.cpp (+33-33)
  • (modified) libcxx/test/std/containers/views/views.span/span.elem/front.pass.cpp (+20-13)
  • (modified) libcxx/test/std/containers/views/views.span/span.elem/op_idx.pass.cpp (+29-21)
  • (modified) libcxx/test/std/containers/views/views.span/span.iterators/begin.pass.cpp (+20-19)
  • (modified) libcxx/test/std/containers/views/views.span/span.iterators/end.pass.cpp (+20-19)
  • (modified) libcxx/test/std/containers/views/views.span/span.iterators/iterator.pass.cpp (+3-3)
  • (modified) libcxx/test/std/containers/views/views.span/span.iterators/iterator_concept_conformance.compile.pass.cpp (+1-1)
  • (modified) libcxx/test/std/containers/views/views.span/span.iterators/rbegin.pass.cpp (+20-19)
  • (modified) libcxx/test/std/containers/views/views.span/span.iterators/rend.pass.cpp (+20-19)
  • (modified) libcxx/test/std/containers/views/views.span/span.objectrep/as_bytes.pass.cpp (+3-2)
  • (modified) libcxx/test/std/containers/views/views.span/span.objectrep/as_writable_bytes.pass.cpp (+3-2)
  • (modified) libcxx/test/std/containers/views/views.span/span.obs/empty.nodiscard.verify.cpp (+3-2)
  • (modified) libcxx/test/std/containers/views/views.span/span.obs/empty.pass.cpp (+23-20)
  • (modified) libcxx/test/std/containers/views/views.span/span.obs/size.pass.cpp (+22-19)
  • (modified) libcxx/test/std/containers/views/views.span/span.obs/size_bytes.pass.cpp (+24-22)
  • (modified) libcxx/test/std/containers/views/views.span/trivially_copyable.compile.pass.cpp (+1-1)
  • (modified) libcxx/test/std/containers/views/views.span/types.pass.cpp (+17-19)
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]

@github-actions

github-actions Bot commented Jun 8, 2026

Copy link
Copy Markdown

✅ With the latest revision this PR passed the C/C++ code formatter.

Comment thread libcxx/test/std/containers/views/views.span/span.cons/array.pass.cpp Outdated
Comment thread libcxx/test/std/containers/views/views.span/types.pass.cpp
Co-authored-by: A. Jiang <de34@live.cn>

@frederick-vs-ja frederick-vs-ja left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM. The CI failure was unrelated.

@eiytoq eiytoq merged commit 4797c60 into llvm:main Jun 9, 2026
79 of 80 checks passed
@eiytoq eiytoq deleted the test/span branch June 9, 2026 04:24
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

libc++ libc++ C++ Standard Library. Not GNU libstdc++. Not libc++abi.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants