diff options
| author | Louis Dionne <ldionne.2@gmail.com> | 2023-09-01 13:45:43 -0400 |
|---|---|---|
| committer | Louis Dionne <ldionne.2@gmail.com> | 2023-09-27 09:01:58 -0400 |
| commit | 6e1dcc9335116f650d68cdbed12bbb34a99b2d9b (patch) | |
| tree | 5d9aa0321c3da1ad17c5270d1ca2185b05bf76bc /libcxx/test/std/strings/basic.string/string.cons/pointer_alloc.pass.cpp | |
| parent | 47b7f33b13b698575432fabc5010c79a0c384b19 (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.cpp | 56 |
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; |
