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