brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.3 KiB · 9af9abd Raw
73 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// UNSUPPORTED: c++0310 11// <string>12 13// basic_string<charT,traits,Allocator>&14//   operator=(basic_string<charT,traits,Allocator>&& str); // constexpr since C++2015 16#include <string>17#include <cassert>18 19#include "test_macros.h"20#include "test_allocator.h"21#include "min_allocator.h"22#include "asan_testing.h"23 24template <class S>25TEST_CONSTEXPR_CXX20 void test(S s1, S s2) {26  S s0 = s2;27  s1   = std::move(s2);28  LIBCPP_ASSERT(s1.__invariants());29  LIBCPP_ASSERT(s2.__invariants());30  assert(s1 == s0);31  assert(s1.capacity() >= s1.size());32  LIBCPP_ASSERT(is_string_asan_correct(s0));33  LIBCPP_ASSERT(is_string_asan_correct(s1));34  LIBCPP_ASSERT(is_string_asan_correct(s2));35}36 37template <class S>38TEST_CONSTEXPR_CXX20 void test_string() {39  test(S(), S());40  test(S("1"), S());41  test(S(), S("1"));42  test(S("1"), S("2"));43  test(S("1"), S("2"));44 45  test(S(), S("abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz"));46  test(S("123456789"), S("abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz"));47  test(S("abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz"), S("123456789"));48  test(S("1234567890123456789012345678901234567890123456789012345678901234567890"),49       S("abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz"));50  test(S("1234567890123456789012345678901234567890123456789012345678901234567890"51         "1234567890123456789012345678901234567890123456789012345678901234567890"),52       S("abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz"));53}54 55TEST_CONSTEXPR_CXX20 bool test() {56  test_string<std::string>();57#if TEST_STD_VER >= 1158  test_string<std::basic_string<char, std::char_traits<char>, min_allocator<char>>>();59  test_string<std::basic_string<char, std::char_traits<char>, safe_allocator<char>>>();60#endif61 62  return true;63}64 65int main(int, char**) {66  test();67#if TEST_STD_VER > 1768  static_assert(test());69#endif70 71  return 0;72}73