brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.8 KiB · 66a2dc2 Raw
87 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// basic_string<charT,traits,Allocator>&12//   append(const basic_string<charT,traits>& str); // constexpr since C++2013 14#include <string>15#include <cassert>16 17#include "test_macros.h"18#include "min_allocator.h"19#include "asan_testing.h"20 21template <class S>22TEST_CONSTEXPR_CXX20 void test(S s, S str, S expected) {23  s.append(str);24  LIBCPP_ASSERT(s.__invariants());25  assert(s == expected);26  LIBCPP_ASSERT(is_string_asan_correct(s));27}28 29template <class S>30TEST_CONSTEXPR_CXX20 void test_string() {31  test(S(), S(), S());32  test(S(), S("12345"), S("12345"));33  test(S(), S("1234567890"), S("1234567890"));34  test(S(), S("12345678901234567890"), S("12345678901234567890"));35 36  test(S("12345"), S(), S("12345"));37  test(S("12345"), S("12345"), S("1234512345"));38  test(S("12345"), S("1234567890"), S("123451234567890"));39  test(S("12345"), S("12345678901234567890"), S("1234512345678901234567890"));40 41  test(S("1234567890"), S(), S("1234567890"));42  test(S("1234567890"), S("12345"), S("123456789012345"));43  test(S("1234567890"), S("1234567890"), S("12345678901234567890"));44  test(S("1234567890"), S("12345678901234567890"), S("123456789012345678901234567890"));45 46  test(S("12345678901234567890"), S(), S("12345678901234567890"));47  test(S("12345678901234567890"), S("12345"), S("1234567890123456789012345"));48  test(S("12345678901234567890"), S("1234567890"), S("123456789012345678901234567890"));49  test(S("12345678901234567890"), S("12345678901234567890"), S("1234567890123456789012345678901234567890"));50 51  // Starting from long string (no SSO)52  test(S("123456789012345678901234567890"), S(), S("123456789012345678901234567890"));53  test(S("123456789012345678901234567890"), S("12345"), S("12345678901234567890123456789012345"));54  test(S("123456789012345678901234567890"), S("1234567890"), S("1234567890123456789012345678901234567890"));55  test(S("123456789012345678901234567890"),56       S("12345678901234567890"),57       S("12345678901234567890123456789012345678901234567890"));58}59 60TEST_CONSTEXPR_CXX20 bool test() {61  test_string<std::string>();62#if TEST_STD_VER >= 1163  test_string<std::basic_string<char, std::char_traits<char>, min_allocator<char>>>();64  test_string<std::basic_string<char, std::char_traits<char>, safe_allocator<char>>>();65#endif66 67#if TEST_STD_VER >= 1168  { // LWG 294669    std::string s;70    s.append({"abc", 1});71    assert(s.size() == 1);72    assert(s == "a");73  }74#endif75 76  return true;77}78 79int main(int, char**) {80  test();81#if TEST_STD_VER > 1782  static_assert(test());83#endif84 85  return 0;86}87