[libcxx-commits] [libcxx] [libc++] Move a bunch of tests from libcxx/test/libcxx to libcxx/test/std (PR #150199)

via libcxx-commits libcxx-commits at lists.llvm.org
Wed Jul 23 02:45:31 PDT 2025


llvmbot wrote:


<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-libcxx

Author: Nikolas Klauser (philnik777)

<details>
<summary>Changes</summary>

These tests test standard behaviour, so they shouldn't be in the libc++-specific tests.


---
Full diff: https://github.com/llvm/llvm-project/pull/150199.diff


8 Files Affected:

- (removed) libcxx/test/libcxx/containers/sequences/forwardlist/bool-conversion.pass.cpp (-37) 
- (removed) libcxx/test/libcxx/containers/sequences/vector/vector.cons/construct_iter_iter.pass.cpp (-56) 
- (removed) libcxx/test/libcxx/containers/sequences/vector/vector.cons/construct_iter_iter_alloc.pass.cpp (-59) 
- (renamed) libcxx/test/std/containers/associative/map/find.modules.compile.pass.mm () 
- (modified) libcxx/test/std/containers/sequences/forwardlist/forwardlist.erasure/erase.pass.cpp (+18) 
- (renamed) libcxx/test/std/containers/sequences/vector/erase.modules.compile.pass.mm () 
- (modified) libcxx/test/std/containers/sequences/vector/vector.cons/construct_iter_iter.pass.cpp (+30-1) 
- (modified) libcxx/test/std/containers/sequences/vector/vector.cons/construct_iter_iter_alloc.pass.cpp (+32-1) 


``````````diff
diff --git a/libcxx/test/libcxx/containers/sequences/forwardlist/bool-conversion.pass.cpp b/libcxx/test/libcxx/containers/sequences/forwardlist/bool-conversion.pass.cpp
deleted file mode 100644
index 237b0f155c7be..0000000000000
--- a/libcxx/test/libcxx/containers/sequences/forwardlist/bool-conversion.pass.cpp
+++ /dev/null
@@ -1,37 +0,0 @@
-//===----------------------------------------------------------------------===//
-//
-// 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
-//
-//===----------------------------------------------------------------------===//
-
-// REQUIRES: std-at-least-c++20
-
-// <forward_list>
-
-// This test shows the effect of implementing `LWG4135`, before it this code
-// was ill-formed, as the predicate is not bool. `LWG4135` suggests that
-// std::erase explicitly specifying the lambda's return type as bool.
-
-#include <forward_list>
-
-struct Bool {
-  Bool()            = default;
-  Bool(const Bool&) = delete;
-  operator bool() const { return true; }
-};
-
-struct Int {
-  Bool& operator==(Int) const {
-    static Bool b;
-    return b;
-  }
-};
-
-int main(int, char**) {
-  std::forward_list<Int> l;
-  std::erase(l, Int{});
-
-  return 0;
-}
diff --git a/libcxx/test/libcxx/containers/sequences/vector/vector.cons/construct_iter_iter.pass.cpp b/libcxx/test/libcxx/containers/sequences/vector/vector.cons/construct_iter_iter.pass.cpp
deleted file mode 100644
index 9e3fb886e6075..0000000000000
--- a/libcxx/test/libcxx/containers/sequences/vector/vector.cons/construct_iter_iter.pass.cpp
+++ /dev/null
@@ -1,56 +0,0 @@
-//===----------------------------------------------------------------------===//
-//
-// 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
-//
-//===----------------------------------------------------------------------===//
-
-// <vector>
-
-// template <class InputIter> vector(InputIter first, InputIter last);
-
-#include <vector>
-#include <cassert>
-
-#include "test_macros.h"
-#include "min_allocator.h"
-
-void test_ctor_under_alloc() {
-  int arr1[] = {42};
-  int arr2[] = {1, 101, 42};
-  {
-    typedef std::vector<int, cpp03_allocator<int> > C;
-    typedef C::allocator_type Alloc;
-    {
-      Alloc::construct_called = false;
-      C v(arr1, arr1 + 1);
-      assert(Alloc::construct_called);
-    }
-    {
-      Alloc::construct_called = false;
-      C v(arr2, arr2 + 3);
-      assert(Alloc::construct_called);
-    }
-  }
-  {
-    typedef std::vector<int, cpp03_overload_allocator<int> > C;
-    typedef C::allocator_type Alloc;
-    {
-      Alloc::construct_called = false;
-      C v(arr1, arr1 + 1);
-      assert(Alloc::construct_called);
-    }
-    {
-      Alloc::construct_called = false;
-      C v(arr2, arr2 + 3);
-      assert(Alloc::construct_called);
-    }
-  }
-}
-
-int main(int, char**) {
-  test_ctor_under_alloc();
-
-  return 0;
-}
diff --git a/libcxx/test/libcxx/containers/sequences/vector/vector.cons/construct_iter_iter_alloc.pass.cpp b/libcxx/test/libcxx/containers/sequences/vector/vector.cons/construct_iter_iter_alloc.pass.cpp
deleted file mode 100644
index fa1bd2d4fda32..0000000000000
--- a/libcxx/test/libcxx/containers/sequences/vector/vector.cons/construct_iter_iter_alloc.pass.cpp
+++ /dev/null
@@ -1,59 +0,0 @@
-//===----------------------------------------------------------------------===//
-//
-// 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
-//
-//===----------------------------------------------------------------------===//
-
-// <vector>
-
-// template <class InputIter> vector(InputIter first, InputIter last,
-//                                   const allocator_type& a);
-
-#include <vector>
-#include <cassert>
-
-#include "test_macros.h"
-#include "min_allocator.h"
-
-void test_ctor_under_alloc() {
-  int arr1[] = {42};
-  int arr2[] = {1, 101, 42};
-  {
-    typedef std::vector<int, cpp03_allocator<int> > C;
-    typedef C::allocator_type Alloc;
-    Alloc a;
-    {
-      Alloc::construct_called = false;
-      C v(arr1, arr1 + 1, a);
-      assert(Alloc::construct_called);
-    }
-    {
-      Alloc::construct_called = false;
-      C v(arr2, arr2 + 3, a);
-      assert(Alloc::construct_called);
-    }
-  }
-  {
-    typedef std::vector<int, cpp03_overload_allocator<int> > C;
-    typedef C::allocator_type Alloc;
-    Alloc a;
-    {
-      Alloc::construct_called = false;
-      C v(arr1, arr1 + 1, a);
-      assert(Alloc::construct_called);
-    }
-    {
-      Alloc::construct_called = false;
-      C v(arr2, arr2 + 3, a);
-      assert(Alloc::construct_called);
-    }
-  }
-}
-
-int main(int, char**) {
-  test_ctor_under_alloc();
-
-  return 0;
-}
diff --git a/libcxx/test/libcxx/containers/associative/map/find.modules.compile.pass.mm b/libcxx/test/std/containers/associative/map/find.modules.compile.pass.mm
similarity index 100%
rename from libcxx/test/libcxx/containers/associative/map/find.modules.compile.pass.mm
rename to libcxx/test/std/containers/associative/map/find.modules.compile.pass.mm
diff --git a/libcxx/test/std/containers/sequences/forwardlist/forwardlist.erasure/erase.pass.cpp b/libcxx/test/std/containers/sequences/forwardlist/forwardlist.erasure/erase.pass.cpp
index 86d7769fe16ee..630e01a0f36cc 100644
--- a/libcxx/test/std/containers/sequences/forwardlist/forwardlist.erasure/erase.pass.cpp
+++ b/libcxx/test/std/containers/sequences/forwardlist/forwardlist.erasure/erase.pass.cpp
@@ -69,6 +69,24 @@ TEST_CONSTEXPR_CXX26 bool test() {
   test<std::forward_list<long>>();
   test<std::forward_list<double>>();
 
+  { // Ensure that the result of operator== is converted to bool
+    struct Bool {
+      Bool()            = default;
+      Bool(const Bool&) = delete;
+      operator bool() const { return true; }
+    };
+
+    struct Int {
+      Bool& operator==(Int) const {
+        static Bool b;
+        return b;
+      }
+    };
+
+    std::forward_list<Int> l;
+    std::erase(l, Int{});
+  }
+
   return true;
 }
 
diff --git a/libcxx/test/libcxx/containers/sequences/vector/erase.modules.compile.pass.mm b/libcxx/test/std/containers/sequences/vector/erase.modules.compile.pass.mm
similarity index 100%
rename from libcxx/test/libcxx/containers/sequences/vector/erase.modules.compile.pass.mm
rename to libcxx/test/std/containers/sequences/vector/erase.modules.compile.pass.mm
diff --git a/libcxx/test/std/containers/sequences/vector/vector.cons/construct_iter_iter.pass.cpp b/libcxx/test/std/containers/sequences/vector/vector.cons/construct_iter_iter.pass.cpp
index bac2ea2b4ca1e..6549735f7b511 100644
--- a/libcxx/test/std/containers/sequences/vector/vector.cons/construct_iter_iter.pass.cpp
+++ b/libcxx/test/std/containers/sequences/vector/vector.cons/construct_iter_iter.pass.cpp
@@ -127,9 +127,9 @@ TEST_CONSTEXPR_CXX20 void emplaceable_concept_tests() {
 }
 
 void test_ctor_under_alloc() {
-#if TEST_STD_VER >= 11
   int arr1[] = {42};
   int arr2[] = {1, 101, 42};
+#if TEST_STD_VER >= 11
   {
     using C  = TCT::vector<>;
     using It = forward_iterator<int*>;
@@ -155,6 +155,35 @@ void test_ctor_under_alloc() {
     }
   }
 #endif
+  // FIXME: This is mostly the same test as above, just worse. They should be merged.
+  {
+    typedef std::vector<int, cpp03_allocator<int> > C;
+    typedef C::allocator_type Alloc;
+    {
+      Alloc::construct_called = false;
+      C v(arr1, arr1 + 1);
+      assert(Alloc::construct_called);
+    }
+    {
+      Alloc::construct_called = false;
+      C v(arr2, arr2 + 3);
+      assert(Alloc::construct_called);
+    }
+  }
+  {
+    typedef std::vector<int, cpp03_overload_allocator<int> > C;
+    typedef C::allocator_type Alloc;
+    {
+      Alloc::construct_called = false;
+      C v(arr1, arr1 + 1);
+      assert(Alloc::construct_called);
+    }
+    {
+      Alloc::construct_called = false;
+      C v(arr2, arr2 + 3);
+      assert(Alloc::construct_called);
+    }
+  }
 }
 
 // In C++03, you can't instantiate a template with a local type.
diff --git a/libcxx/test/std/containers/sequences/vector/vector.cons/construct_iter_iter_alloc.pass.cpp b/libcxx/test/std/containers/sequences/vector/vector.cons/construct_iter_iter_alloc.pass.cpp
index de325040f4a19..019f427c006a1 100644
--- a/libcxx/test/std/containers/sequences/vector/vector.cons/construct_iter_iter_alloc.pass.cpp
+++ b/libcxx/test/std/containers/sequences/vector/vector.cons/construct_iter_iter_alloc.pass.cpp
@@ -141,9 +141,9 @@ TEST_CONSTEXPR_CXX20 void emplaceable_concept_tests() {
 }
 
 void test_ctor_under_alloc() {
-#if TEST_STD_VER >= 11
   int arr1[] = {42};
   int arr2[] = {1, 101, 42};
+#if TEST_STD_VER >= 11
   {
     using C     = TCT::vector<>;
     using It    = forward_iterator<int*>;
@@ -173,6 +173,37 @@ void test_ctor_under_alloc() {
     }
   }
 #endif
+  // FIXME: This is mostly the same test as above, just worse. They should be merged.
+  {
+    typedef std::vector<int, cpp03_allocator<int> > C;
+    typedef C::allocator_type Alloc;
+    Alloc a;
+    {
+      Alloc::construct_called = false;
+      C v(arr1, arr1 + 1, a);
+      assert(Alloc::construct_called);
+    }
+    {
+      Alloc::construct_called = false;
+      C v(arr2, arr2 + 3, a);
+      assert(Alloc::construct_called);
+    }
+  }
+  {
+    typedef std::vector<int, cpp03_overload_allocator<int> > C;
+    typedef C::allocator_type Alloc;
+    Alloc a;
+    {
+      Alloc::construct_called = false;
+      C v(arr1, arr1 + 1, a);
+      assert(Alloc::construct_called);
+    }
+    {
+      Alloc::construct_called = false;
+      C v(arr2, arr2 + 3, a);
+      assert(Alloc::construct_called);
+    }
+  }
 }
 
 TEST_CONSTEXPR_CXX20 bool test() {

``````````

</details>


https://github.com/llvm/llvm-project/pull/150199


More information about the libcxx-commits mailing list