summaryrefslogtreecommitdiff
path: root/libcxx/test/std/strings/basic.string/string.cons/pointer_alloc.pass.cpp
diff options
context:
space:
mode:
authorLouis Dionne <ldionne.2@gmail.com>2023-09-01 13:45:43 -0400
committerLouis Dionne <ldionne.2@gmail.com>2023-09-27 09:01:58 -0400
commit6e1dcc9335116f650d68cdbed12bbb34a99b2d9b (patch)
tree5d9aa0321c3da1ad17c5270d1ca2185b05bf76bc /libcxx/test/std/strings/basic.string/string.cons/pointer_alloc.pass.cpp
parent47b7f33b13b698575432fabc5010c79a0c384b19 (diff)
[libc++] Refactor string unit tests to ease addition of new allocators
While doing this, I also found a few tests that were either clearly incorrect (e.g. testing the wrong function) or that lacked basic test coverage like testing std::string itself (e.g. the test was only checking std::basic_string with a custom allocator). In these cases, I did a few conservative drive-by changes. Differential Revision: https://reviews.llvm.org/D140550 Co-authored-by: Brendan Emery <brendan.emery@esrlabs.com>
Diffstat (limited to 'libcxx/test/std/strings/basic.string/string.cons/pointer_alloc.pass.cpp')
-rw-r--r--libcxx/test/std/strings/basic.string/string.cons/pointer_alloc.pass.cpp56
1 files changed, 22 insertions, 34 deletions
diff --git a/libcxx/test/std/strings/basic.string/string.cons/pointer_alloc.pass.cpp b/libcxx/test/std/strings/basic.string/string.cons/pointer_alloc.pass.cpp
index c7e31f5e64e0..84a29df5b57b 100644
--- a/libcxx/test/std/strings/basic.string/string.cons/pointer_alloc.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.cons/pointer_alloc.pass.cpp
@@ -20,23 +20,22 @@
#include "test_allocator.h"
#include "min_allocator.h"
-template <class charT>
+template <class Alloc, class charT>
TEST_CONSTEXPR_CXX20 void test(const charT* s) {
- typedef std::basic_string<charT, std::char_traits<charT>, test_allocator<charT> > S;
+ typedef std::basic_string<charT, std::char_traits<charT>, Alloc> S;
typedef typename S::traits_type T;
- typedef typename S::allocator_type A;
std::size_t n = T::length(s);
S s2(s);
LIBCPP_ASSERT(s2.__invariants());
assert(s2.size() == n);
assert(T::compare(s2.data(), s, n) == 0);
- assert(s2.get_allocator() == A());
+ assert(s2.get_allocator() == Alloc());
assert(s2.capacity() >= s2.size());
}
-template <class charT, class A>
-TEST_CONSTEXPR_CXX20 void test(const charT* s, const A& a) {
- typedef std::basic_string<charT, std::char_traits<charT>, A> S;
+template <class Alloc, class charT>
+TEST_CONSTEXPR_CXX20 void test(const charT* s, const Alloc& a) {
+ typedef std::basic_string<charT, std::char_traits<charT>, Alloc> S;
typedef typename S::traits_type T;
std::size_t n = T::length(s);
S s2(s, a);
@@ -47,38 +46,27 @@ TEST_CONSTEXPR_CXX20 void test(const charT* s, const A& a) {
assert(s2.capacity() >= s2.size());
}
-TEST_CONSTEXPR_CXX20 bool test() {
- {
- typedef test_allocator<char> A;
+template <class Alloc>
+TEST_CONSTEXPR_CXX20 void test(const Alloc& a) {
+ test<Alloc>("");
+ test<Alloc>("", Alloc(a));
- test("");
- test("", A(2));
+ test<Alloc>("1");
+ test<Alloc>("1", Alloc(a));
- test("1");
- test("1", A(2));
+ test<Alloc>("1234567980");
+ test<Alloc>("1234567980", Alloc(a));
- test("1234567980");
- test("1234567980", A(2));
+ test<Alloc>("123456798012345679801234567980123456798012345679801234567980");
+ test<Alloc>("123456798012345679801234567980123456798012345679801234567980", Alloc(a));
+}
- test("123456798012345679801234567980123456798012345679801234567980");
- test("123456798012345679801234567980123456798012345679801234567980", A(2));
- }
+TEST_CONSTEXPR_CXX20 bool test() {
+ test(std::allocator<char>());
+ test(test_allocator<char>());
+ test(test_allocator<char>(2));
#if TEST_STD_VER >= 11
- {
- typedef min_allocator<char> A;
-
- test("");
- test("", A());
-
- test("1");
- test("1", A());
-
- test("1234567980");
- test("1234567980", A());
-
- test("123456798012345679801234567980123456798012345679801234567980");
- test("123456798012345679801234567980123456798012345679801234567980", A());
- }
+ test(min_allocator<char>());
#endif
return true;