Skip to content

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

Open
eiytoq wants to merge 4 commits into
llvm:mainfrom
eiytoq:test/span
Open

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

Conversation

@eiytoq
Copy link
Copy Markdown
Contributor

@eiytoq eiytoq commented Jun 8, 2026

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
Copy link
Copy Markdown

github-actions Bot commented Jun 8, 2026

✅ 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>
Copy link
Copy Markdown
Contributor

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

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.

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