[libcxx-commits] [libcxx] [libc++][test] Refactor tests for rotate and rotate_copy (PR #126458)

Louis Dionne via libcxx-commits libcxx-commits at lists.llvm.org
Wed Feb 19 10:14:30 PST 2025


================
@@ -358,91 +356,90 @@ test1()
     assert(*ie[4] == 4);
 
     std::unique_ptr<int> ig[6];
-    const int sg = static_cast<int>(sizeof(ig)/sizeof(ig[0]));
+    const int sg = static_cast<int>(sizeof(ig) / sizeof(ig[0]));
     for (int i = 0; i < sg; ++i)
-        ig[i].reset(new int(i));
-    r = std::rotate(Iter(ig), Iter(ig), Iter(ig+sg));
-    assert(base(r) == ig+sg);
+      ig[i].reset(new int(i));
+    r = std::rotate(Iter(ig), Iter(ig), Iter(ig + sg));
+    assert(base(r) == ig + sg);
     assert(*ig[0] == 0);
     assert(*ig[1] == 1);
     assert(*ig[2] == 2);
     assert(*ig[3] == 3);
     assert(*ig[4] == 4);
     assert(*ig[5] == 5);
-    r = std::rotate(Iter(ig), Iter(ig+1), Iter(ig+sg));
-    assert(base(r) == ig+5);
+    r = std::rotate(Iter(ig), Iter(ig + 1), Iter(ig + sg));
+    assert(base(r) == ig + 5);
     assert(*ig[0] == 1);
     assert(*ig[1] == 2);
     assert(*ig[2] == 3);
     assert(*ig[3] == 4);
     assert(*ig[4] == 5);
     assert(*ig[5] == 0);
-    r = std::rotate(Iter(ig), Iter(ig+2), Iter(ig+sg));
-    assert(base(r) == ig+4);
+    r = std::rotate(Iter(ig), Iter(ig + 2), Iter(ig + sg));
+    assert(base(r) == ig + 4);
     assert(*ig[0] == 3);
     assert(*ig[1] == 4);
     assert(*ig[2] == 5);
     assert(*ig[3] == 0);
     assert(*ig[4] == 1);
     assert(*ig[5] == 2);
-    r = std::rotate(Iter(ig), Iter(ig+3), Iter(ig+sg));
-    assert(base(r) == ig+3);
+    r = std::rotate(Iter(ig), Iter(ig + 3), Iter(ig + sg));
+    assert(base(r) == ig + 3);
     assert(*ig[0] == 0);
     assert(*ig[1] == 1);
     assert(*ig[2] == 2);
     assert(*ig[3] == 3);
     assert(*ig[4] == 4);
     assert(*ig[5] == 5);
-    r = std::rotate(Iter(ig), Iter(ig+4), Iter(ig+sg));
-    assert(base(r) == ig+2);
+    r = std::rotate(Iter(ig), Iter(ig + 4), Iter(ig + sg));
+    assert(base(r) == ig + 2);
     assert(*ig[0] == 4);
     assert(*ig[1] == 5);
     assert(*ig[2] == 0);
     assert(*ig[3] == 1);
     assert(*ig[4] == 2);
     assert(*ig[5] == 3);
-    r = std::rotate(Iter(ig), Iter(ig+5), Iter(ig+sg));
-    assert(base(r) == ig+1);
+    r = std::rotate(Iter(ig), Iter(ig + 5), Iter(ig + sg));
+    assert(base(r) == ig + 1);
     assert(*ig[0] == 3);
     assert(*ig[1] == 4);
     assert(*ig[2] == 5);
     assert(*ig[3] == 0);
     assert(*ig[4] == 1);
     assert(*ig[5] == 2);
-    r = std::rotate(Iter(ig), Iter(ig+sg), Iter(ig+sg));
+    r = std::rotate(Iter(ig), Iter(ig + sg), Iter(ig + sg));
     assert(base(r) == ig);
     assert(*ig[0] == 3);
     assert(*ig[1] == 4);
     assert(*ig[2] == 5);
     assert(*ig[3] == 0);
     assert(*ig[4] == 1);
     assert(*ig[5] == 2);
-}
+  }
+};
 
 #endif // TEST_STD_VER >= 11
 
-int main(int, char**)
-{
-    test<forward_iterator<int*> >();
-    test<bidirectional_iterator<int*> >();
-    test<random_access_iterator<int*> >();
-    test<int*>();
+TEST_CONSTEXPR_CXX20 bool test() {
+  types::for_each(types::forward_iterator_list<int*>(), TestIter());
 
-#if TEST_STD_VER >= 11
+#if TEST_STD_VER >= 11 && TEST_STD_VER <= 17
+  types::for_each(types::forward_iterator_list<std::unique_ptr<int>*>(), TestUniquePtr());
+#elif TEST_STD_VER == 20
+  if (!std::is_constant_evaluated())
+    types::for_each(types::forward_iterator_list<std::unique_ptr<int>*>(), TestUniquePtr());
+#elif TEST_STD_VER >= 23
+  types::for_each(types::forward_iterator_list<std::unique_ptr<int>*>(), TestUniquePtr());
+#endif
----------------
ldionne wrote:

Same comment I left in another review about `TEST_IS_CONSTANT_EVALUATED`.

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


More information about the libcxx-commits mailing list