Files
Nikolas Klauser 189d1853e4 [libc++] Add an initial modulemap for the test support headers (#162800)
This should improve the time it takes to run the test suite a bit. Right
now there are only a handful of headers in the modulemap because we're
missing a lot of includes in the tests. New headers should be added
there from the start, and we should fill up the modulemap over time
until it contains all the test support headers.
2025-11-13 08:28:48 +00:00

64 lines
1.8 KiB
C++

//===----------------------------------------------------------------------===//
//
// 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
// <string>
// ~basic_string() // implied noexcept; // constexpr since C++20
#include <cassert>
#include <string>
#include <type_traits>
#include "test_allocator.h"
#include "test_macros.h"
template <class T>
struct throwing_alloc {
typedef T value_type;
throwing_alloc(const throwing_alloc&);
T* allocate(std::size_t);
~throwing_alloc() noexcept(false);
};
// Test that it's possible to take the address of basic_string's destructors
// by creating globals which will register their destructors with cxa_atexit.
std::string unused_string;
#ifndef TEST_HAS_NO_WIDE_CHARACTERS
std::wstring unused_wide_string;
#endif
static_assert(std::is_nothrow_destructible<std::string>::value, "");
static_assert(
std::is_nothrow_destructible< std::basic_string<char, std::char_traits<char>, test_allocator<char>>>::value, "");
LIBCPP_STATIC_ASSERT(
!std::is_nothrow_destructible< std::basic_string<char, std::char_traits<char>, throwing_alloc<char>>>::value, "");
TEST_CONSTEXPR_CXX20 bool test() {
test_allocator_statistics alloc_stats;
{
std::basic_string<char, std::char_traits<char>, test_allocator<char>> str2((test_allocator<char>(&alloc_stats)));
str2 = "long long string so no SSO";
assert(alloc_stats.alloc_count > 0);
LIBCPP_ASSERT(alloc_stats.alloc_count == 1);
}
assert(alloc_stats.alloc_count == 0);
return true;
}
int main(int, char**) {
test();
#if TEST_STD_VER > 17
static_assert(test());
#endif
return 0;
}