//===----------------------------------------------------------------------===// // // 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 // //===----------------------------------------------------------------------===// // UNSUPPORTED: c++03, c++11, c++14 // UNSUPPORTED: availability-filesystem-missing // These tests require locale for non-char paths // UNSUPPORTED: no-localization // // class path // template , // class Allocator = allocator> // basic_string // generic_string(const Allocator& a = Allocator()) const; #include #include #include #include #include "count_new.h" #include "make_string.h" #include "min_allocator.h" #include "test_iterators.h" #include "test_macros.h" namespace fs = std::filesystem; MultiStringType longString = MKSTR("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ/123456789/abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"); // generic_string forwards to string. Tests for // string() are in "path.native.obs/string_alloc.pass.cpp". // generic_string is minimally tested here. template void doAllocTest() { using namespace fs; using Traits = std::char_traits; using Alloc = malloc_allocator; using Str = std::basic_string; const CharT* expect = longString; const path p((const char*)longString); { // On Windows, charset conversions cause allocations outside of the // provided allocator. TEST_NOT_WIN32(DisableAllocationGuard g); Alloc a; Alloc::disable_default_constructor = true; Str s = p.generic_string(a); assert(s == expect); assert(Alloc::alloc_count > 0); assert(Alloc::outstanding_alloc() == 1); Alloc::disable_default_constructor = false; } } int main(int, char**) { doAllocTest(); #ifndef TEST_HAS_NO_WIDE_CHARACTERS doAllocTest(); #endif doAllocTest(); doAllocTest(); #if TEST_STD_VER > 17 && defined(__cpp_lib_char8_t) doAllocTest(); #endif return 0; }