[libcxx-commits] [libcxx] [libc++] Speed up vector<bool> copy/move-ctors [1/3] (PR #120132)
Peng Liu via libcxx-commits
libcxx-commits at lists.llvm.org
Wed Jan 29 13:42:40 PST 2025
================
@@ -7,67 +7,77 @@
//===----------------------------------------------------------------------===//
// <vector>
+// vector<bool>
// vector(const vector& v, const allocator_type& a);
-#include <vector>
#include <cassert>
+#include <vector>
-#include "test_macros.h"
-#include "test_allocator.h"
#include "min_allocator.h"
+#include "test_allocator.h"
+#include "test_macros.h"
-template <class C>
-TEST_CONSTEXPR_CXX20 void test(const C& x, const typename C::allocator_type& a)
-{
- typename C::size_type s = x.size();
- C c(x, a);
- LIBCPP_ASSERT(c.__invariants());
- assert(c.size() == s);
- assert(c == x);
+template <class A>
+TEST_CONSTEXPR_CXX20 void test(const std::vector<bool, A>& x, const A& a) {
+ std::vector<bool, A> c(x, a);
+ LIBCPP_ASSERT(c.__invariants());
+ assert(c.size() == x.size());
+ assert(c == x);
+ assert(c.get_allocator() == a);
}
-TEST_CONSTEXPR_CXX20 bool tests()
-{
- {
- bool a[] = {0, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 1, 1, 0, 1, 0};
- bool* an = a + sizeof(a)/sizeof(a[0]);
- test(std::vector<bool>(a, an), std::allocator<bool>());
- }
- {
- std::vector<bool, test_allocator<bool> > l(3, true, test_allocator<bool>(5));
- std::vector<bool, test_allocator<bool> > l2(l, test_allocator<bool>(3));
- assert(l2 == l);
- assert(l2.get_allocator() == test_allocator<bool>(3));
- }
- {
- std::vector<bool, other_allocator<bool> > l(3, true, other_allocator<bool>(5));
- std::vector<bool, other_allocator<bool> > l2(l, other_allocator<bool>(3));
- assert(l2 == l);
- assert(l2.get_allocator() == other_allocator<bool>(3));
- }
-#if TEST_STD_VER >= 11
- {
- bool a[] = {0, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 1, 1, 0, 1, 0};
- bool* an = a + sizeof(a)/sizeof(a[0]);
- test(std::vector<bool, min_allocator<bool>>(a, an), min_allocator<bool>());
- }
- {
- std::vector<bool, min_allocator<bool> > l(3, true, min_allocator<bool>());
- std::vector<bool, min_allocator<bool> > l2(l, min_allocator<bool>());
- assert(l2 == l);
- assert(l2.get_allocator() == min_allocator<bool>());
- }
-#endif
+TEST_CONSTEXPR_CXX20 bool tests() {
+ bool a05[5] = {1, 0, 1, 0, 1};
----------------
winner245 wrote:
The usages of built-in arrays are have been replaced by `std::array` in the tests.
https://github.com/llvm/llvm-project/pull/120132
More information about the libcxx-commits
mailing list