brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.6 KiB · 43414da Raw
63 lines · cpp
1//===----------------------------------------------------------------------===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8 9// <string>10 11// void reserve(); // Deprecated in C++20, removed in C++26.12 13// ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_DISABLE_DEPRECATION_WARNINGS -D_LIBCPP_ENABLE_CXX26_REMOVED_STRING_RESERVE14 15#include <string>16#include <stdexcept>17#include <cassert>18 19#include "test_macros.h"20#include "min_allocator.h"21#include "asan_testing.h"22 23template <class S>24void test(typename S::size_type min_cap, typename S::size_type erased_index) {25  S s(min_cap, 'a');26  s.erase(erased_index);27  assert(s.size() == erased_index);28  assert(s.capacity() >= min_cap); // Check that we really have at least this capacity.29 30  typename S::size_type old_cap = s.capacity();31  S s0                          = s;32  s.reserve();33  LIBCPP_ASSERT(s.__invariants());34  assert(s == s0);35  assert(s.capacity() <= old_cap);36  assert(s.capacity() >= s.size());37  LIBCPP_ASSERT(is_string_asan_correct(s));38}39 40template <class S>41void test_string() {42  test<S>(0, 0);43  test<S>(10, 5);44  test<S>(100, 5);45  test<S>(100, 50);46}47 48bool test() {49  test_string<std::string>();50#if TEST_STD_VER >= 1151  test_string<std::basic_string<char, std::char_traits<char>, min_allocator<char>>>();52  test_string<std::basic_string<char, std::char_traits<char>, safe_allocator<char>>>();53#endif54 55  return true;56}57 58int main(int, char**) {59  test();60 61  return 0;62}63