15a83710eSEric Fiselier //===----------------------------------------------------------------------===//
25a83710eSEric Fiselier //
357b08b09SChandler Carruth // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
457b08b09SChandler Carruth // See https://llvm.org/LICENSE.txt for license information.
557b08b09SChandler Carruth // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
65a83710eSEric Fiselier //
75a83710eSEric Fiselier //===----------------------------------------------------------------------===//
85a83710eSEric Fiselier
95a83710eSEric Fiselier // <string>
105a83710eSEric Fiselier
11*425620ccSNikolas Klauser // iterator erase(const_iterator first, const_iterator last); // constexpr since C++20
125a83710eSEric Fiselier
135a83710eSEric Fiselier #include <string>
145a83710eSEric Fiselier #include <cassert>
155a83710eSEric Fiselier
161f4231f8SEric Fiselier #include "test_macros.h"
175a83710eSEric Fiselier #include "min_allocator.h"
185a83710eSEric Fiselier
195a83710eSEric Fiselier template <class S>
20dcffa7d3SNikolas Klauser TEST_CONSTEXPR_CXX20 void
test(S s,typename S::difference_type pos,typename S::difference_type n,S expected)215a83710eSEric Fiselier test(S s, typename S::difference_type pos, typename S::difference_type n, S expected)
225a83710eSEric Fiselier {
235a83710eSEric Fiselier typename S::const_iterator first = s.cbegin() + pos;
245a83710eSEric Fiselier typename S::const_iterator last = s.cbegin() + pos + n;
255a83710eSEric Fiselier typename S::iterator i = s.erase(first, last);
261f4231f8SEric Fiselier LIBCPP_ASSERT(s.__invariants());
274deabc97SBilly Robert O'Neal III assert(s[s.size()] == typename S::value_type());
285a83710eSEric Fiselier assert(s == expected);
295a83710eSEric Fiselier assert(i - s.begin() == pos);
305a83710eSEric Fiselier }
315a83710eSEric Fiselier
test()32*425620ccSNikolas Klauser TEST_CONSTEXPR_CXX20 bool test() {
335a83710eSEric Fiselier {
345a83710eSEric Fiselier typedef std::string S;
355a83710eSEric Fiselier test(S(""), 0, 0, S(""));
365a83710eSEric Fiselier test(S("abcde"), 0, 0, S("abcde"));
375a83710eSEric Fiselier test(S("abcde"), 0, 1, S("bcde"));
385a83710eSEric Fiselier test(S("abcde"), 0, 2, S("cde"));
395a83710eSEric Fiselier test(S("abcde"), 0, 4, S("e"));
405a83710eSEric Fiselier test(S("abcde"), 0, 5, S(""));
415a83710eSEric Fiselier test(S("abcde"), 1, 0, S("abcde"));
425a83710eSEric Fiselier test(S("abcde"), 1, 1, S("acde"));
435a83710eSEric Fiselier test(S("abcde"), 1, 2, S("ade"));
445a83710eSEric Fiselier test(S("abcde"), 1, 3, S("ae"));
455a83710eSEric Fiselier test(S("abcde"), 1, 4, S("a"));
465a83710eSEric Fiselier test(S("abcde"), 2, 0, S("abcde"));
475a83710eSEric Fiselier test(S("abcde"), 2, 1, S("abde"));
485a83710eSEric Fiselier test(S("abcde"), 2, 2, S("abe"));
495a83710eSEric Fiselier test(S("abcde"), 2, 3, S("ab"));
505a83710eSEric Fiselier test(S("abcde"), 4, 0, S("abcde"));
515a83710eSEric Fiselier test(S("abcde"), 4, 1, S("abcd"));
525a83710eSEric Fiselier test(S("abcde"), 5, 0, S("abcde"));
535a83710eSEric Fiselier test(S("abcdefghij"), 0, 0, S("abcdefghij"));
545a83710eSEric Fiselier test(S("abcdefghij"), 0, 1, S("bcdefghij"));
555a83710eSEric Fiselier test(S("abcdefghij"), 0, 5, S("fghij"));
565a83710eSEric Fiselier test(S("abcdefghij"), 0, 9, S("j"));
575a83710eSEric Fiselier test(S("abcdefghij"), 0, 10, S(""));
585a83710eSEric Fiselier test(S("abcdefghij"), 1, 0, S("abcdefghij"));
595a83710eSEric Fiselier test(S("abcdefghij"), 1, 1, S("acdefghij"));
605a83710eSEric Fiselier test(S("abcdefghij"), 1, 4, S("afghij"));
615a83710eSEric Fiselier test(S("abcdefghij"), 1, 8, S("aj"));
625a83710eSEric Fiselier test(S("abcdefghij"), 1, 9, S("a"));
635a83710eSEric Fiselier test(S("abcdefghij"), 5, 0, S("abcdefghij"));
645a83710eSEric Fiselier test(S("abcdefghij"), 5, 1, S("abcdeghij"));
655a83710eSEric Fiselier test(S("abcdefghij"), 5, 2, S("abcdehij"));
665a83710eSEric Fiselier test(S("abcdefghij"), 5, 4, S("abcdej"));
675a83710eSEric Fiselier test(S("abcdefghij"), 5, 5, S("abcde"));
685a83710eSEric Fiselier test(S("abcdefghij"), 9, 0, S("abcdefghij"));
695a83710eSEric Fiselier test(S("abcdefghij"), 9, 1, S("abcdefghi"));
705a83710eSEric Fiselier test(S("abcdefghij"), 10, 0, S("abcdefghij"));
715a83710eSEric Fiselier test(S("abcdefghijklmnopqrst"), 0, 0, S("abcdefghijklmnopqrst"));
725a83710eSEric Fiselier test(S("abcdefghijklmnopqrst"), 0, 1, S("bcdefghijklmnopqrst"));
735a83710eSEric Fiselier test(S("abcdefghijklmnopqrst"), 0, 10, S("klmnopqrst"));
745a83710eSEric Fiselier test(S("abcdefghijklmnopqrst"), 0, 19, S("t"));
755a83710eSEric Fiselier test(S("abcdefghijklmnopqrst"), 0, 20, S(""));
765a83710eSEric Fiselier test(S("abcdefghijklmnopqrst"), 1, 0, S("abcdefghijklmnopqrst"));
775a83710eSEric Fiselier test(S("abcdefghijklmnopqrst"), 1, 1, S("acdefghijklmnopqrst"));
785a83710eSEric Fiselier test(S("abcdefghijklmnopqrst"), 1, 9, S("aklmnopqrst"));
795a83710eSEric Fiselier test(S("abcdefghijklmnopqrst"), 1, 18, S("at"));
805a83710eSEric Fiselier test(S("abcdefghijklmnopqrst"), 1, 19, S("a"));
815a83710eSEric Fiselier test(S("abcdefghijklmnopqrst"), 10, 0, S("abcdefghijklmnopqrst"));
825a83710eSEric Fiselier test(S("abcdefghijklmnopqrst"), 10, 1, S("abcdefghijlmnopqrst"));
835a83710eSEric Fiselier test(S("abcdefghijklmnopqrst"), 10, 5, S("abcdefghijpqrst"));
845a83710eSEric Fiselier test(S("abcdefghijklmnopqrst"), 10, 9, S("abcdefghijt"));
855a83710eSEric Fiselier test(S("abcdefghijklmnopqrst"), 10, 10, S("abcdefghij"));
865a83710eSEric Fiselier test(S("abcdefghijklmnopqrst"), 19, 0, S("abcdefghijklmnopqrst"));
875a83710eSEric Fiselier test(S("abcdefghijklmnopqrst"), 19, 1, S("abcdefghijklmnopqrs"));
885a83710eSEric Fiselier test(S("abcdefghijklmnopqrst"), 20, 0, S("abcdefghijklmnopqrst"));
895a83710eSEric Fiselier }
901f4231f8SEric Fiselier #if TEST_STD_VER >= 11
915a83710eSEric Fiselier {
925a83710eSEric Fiselier typedef std::basic_string<char, std::char_traits<char>, min_allocator<char>> S;
935a83710eSEric Fiselier test(S(""), 0, 0, S(""));
945a83710eSEric Fiselier test(S("abcde"), 0, 0, S("abcde"));
955a83710eSEric Fiselier test(S("abcde"), 0, 1, S("bcde"));
965a83710eSEric Fiselier test(S("abcde"), 0, 2, S("cde"));
975a83710eSEric Fiselier test(S("abcde"), 0, 4, S("e"));
985a83710eSEric Fiselier test(S("abcde"), 0, 5, S(""));
995a83710eSEric Fiselier test(S("abcde"), 1, 0, S("abcde"));
1005a83710eSEric Fiselier test(S("abcde"), 1, 1, S("acde"));
1015a83710eSEric Fiselier test(S("abcde"), 1, 2, S("ade"));
1025a83710eSEric Fiselier test(S("abcde"), 1, 3, S("ae"));
1035a83710eSEric Fiselier test(S("abcde"), 1, 4, S("a"));
1045a83710eSEric Fiselier test(S("abcde"), 2, 0, S("abcde"));
1055a83710eSEric Fiselier test(S("abcde"), 2, 1, S("abde"));
1065a83710eSEric Fiselier test(S("abcde"), 2, 2, S("abe"));
1075a83710eSEric Fiselier test(S("abcde"), 2, 3, S("ab"));
1085a83710eSEric Fiselier test(S("abcde"), 4, 0, S("abcde"));
1095a83710eSEric Fiselier test(S("abcde"), 4, 1, S("abcd"));
1105a83710eSEric Fiselier test(S("abcde"), 5, 0, S("abcde"));
1115a83710eSEric Fiselier test(S("abcdefghij"), 0, 0, S("abcdefghij"));
1125a83710eSEric Fiselier test(S("abcdefghij"), 0, 1, S("bcdefghij"));
1135a83710eSEric Fiselier test(S("abcdefghij"), 0, 5, S("fghij"));
1145a83710eSEric Fiselier test(S("abcdefghij"), 0, 9, S("j"));
1155a83710eSEric Fiselier test(S("abcdefghij"), 0, 10, S(""));
1165a83710eSEric Fiselier test(S("abcdefghij"), 1, 0, S("abcdefghij"));
1175a83710eSEric Fiselier test(S("abcdefghij"), 1, 1, S("acdefghij"));
1185a83710eSEric Fiselier test(S("abcdefghij"), 1, 4, S("afghij"));
1195a83710eSEric Fiselier test(S("abcdefghij"), 1, 8, S("aj"));
1205a83710eSEric Fiselier test(S("abcdefghij"), 1, 9, S("a"));
1215a83710eSEric Fiselier test(S("abcdefghij"), 5, 0, S("abcdefghij"));
1225a83710eSEric Fiselier test(S("abcdefghij"), 5, 1, S("abcdeghij"));
1235a83710eSEric Fiselier test(S("abcdefghij"), 5, 2, S("abcdehij"));
1245a83710eSEric Fiselier test(S("abcdefghij"), 5, 4, S("abcdej"));
1255a83710eSEric Fiselier test(S("abcdefghij"), 5, 5, S("abcde"));
1265a83710eSEric Fiselier test(S("abcdefghij"), 9, 0, S("abcdefghij"));
1275a83710eSEric Fiselier test(S("abcdefghij"), 9, 1, S("abcdefghi"));
1285a83710eSEric Fiselier test(S("abcdefghij"), 10, 0, S("abcdefghij"));
1295a83710eSEric Fiselier test(S("abcdefghijklmnopqrst"), 0, 0, S("abcdefghijklmnopqrst"));
1305a83710eSEric Fiselier test(S("abcdefghijklmnopqrst"), 0, 1, S("bcdefghijklmnopqrst"));
1315a83710eSEric Fiselier test(S("abcdefghijklmnopqrst"), 0, 10, S("klmnopqrst"));
1325a83710eSEric Fiselier test(S("abcdefghijklmnopqrst"), 0, 19, S("t"));
1335a83710eSEric Fiselier test(S("abcdefghijklmnopqrst"), 0, 20, S(""));
1345a83710eSEric Fiselier test(S("abcdefghijklmnopqrst"), 1, 0, S("abcdefghijklmnopqrst"));
1355a83710eSEric Fiselier test(S("abcdefghijklmnopqrst"), 1, 1, S("acdefghijklmnopqrst"));
1365a83710eSEric Fiselier test(S("abcdefghijklmnopqrst"), 1, 9, S("aklmnopqrst"));
1375a83710eSEric Fiselier test(S("abcdefghijklmnopqrst"), 1, 18, S("at"));
1385a83710eSEric Fiselier test(S("abcdefghijklmnopqrst"), 1, 19, S("a"));
1395a83710eSEric Fiselier test(S("abcdefghijklmnopqrst"), 10, 0, S("abcdefghijklmnopqrst"));
1405a83710eSEric Fiselier test(S("abcdefghijklmnopqrst"), 10, 1, S("abcdefghijlmnopqrst"));
1415a83710eSEric Fiselier test(S("abcdefghijklmnopqrst"), 10, 5, S("abcdefghijpqrst"));
1425a83710eSEric Fiselier test(S("abcdefghijklmnopqrst"), 10, 9, S("abcdefghijt"));
1435a83710eSEric Fiselier test(S("abcdefghijklmnopqrst"), 10, 10, S("abcdefghij"));
1445a83710eSEric Fiselier test(S("abcdefghijklmnopqrst"), 19, 0, S("abcdefghijklmnopqrst"));
1455a83710eSEric Fiselier test(S("abcdefghijklmnopqrst"), 19, 1, S("abcdefghijklmnopqrs"));
1465a83710eSEric Fiselier test(S("abcdefghijklmnopqrst"), 20, 0, S("abcdefghijklmnopqrst"));
1475a83710eSEric Fiselier }
1485a83710eSEric Fiselier #endif
1492df59c50SJF Bastien
150dcffa7d3SNikolas Klauser return true;
151dcffa7d3SNikolas Klauser }
152dcffa7d3SNikolas Klauser
main(int,char **)153dcffa7d3SNikolas Klauser int main(int, char**)
154dcffa7d3SNikolas Klauser {
155dcffa7d3SNikolas Klauser test();
156dcffa7d3SNikolas Klauser #if TEST_STD_VER > 17
157*425620ccSNikolas Klauser static_assert(test());
158dcffa7d3SNikolas Klauser #endif
159dcffa7d3SNikolas Klauser
1602df59c50SJF Bastien return 0;
1615a83710eSEric Fiselier }
162