xref: /llvm-project/libcxx/test/std/containers/associative/multiset/erase_key.pass.cpp (revision 5ffe11a9fccfffbabbea5bbcc1cfd4b21af6d631)
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 // <set>
105a83710eSEric Fiselier 
115a83710eSEric Fiselier // class multiset
125a83710eSEric Fiselier 
135a83710eSEric Fiselier // size_type erase(const key_type& k);
145a83710eSEric Fiselier 
155a83710eSEric Fiselier #include <set>
165a83710eSEric Fiselier #include <cassert>
175a83710eSEric Fiselier 
187fc6a556SMarshall Clow #include "test_macros.h"
195a83710eSEric Fiselier #include "min_allocator.h"
205a83710eSEric Fiselier 
main(int,char **)212df59c50SJF Bastien int main(int, char**)
225a83710eSEric Fiselier {
235a83710eSEric Fiselier     {
245a83710eSEric Fiselier         typedef std::multiset<int> M;
255a83710eSEric Fiselier         typedef int V;
265a83710eSEric Fiselier         typedef M::size_type I;
275a83710eSEric Fiselier         V ar[] =
285a83710eSEric Fiselier         {
295a83710eSEric Fiselier             3,
305a83710eSEric Fiselier             3,
315a83710eSEric Fiselier             3,
325a83710eSEric Fiselier             5,
335a83710eSEric Fiselier             5,
345a83710eSEric Fiselier             5,
355a83710eSEric Fiselier             7,
365a83710eSEric Fiselier             7,
375a83710eSEric Fiselier             7
385a83710eSEric Fiselier         };
395a83710eSEric Fiselier         M m(ar, ar + sizeof(ar)/sizeof(ar[0]));
405a83710eSEric Fiselier         assert(m.size() == 9);
415a83710eSEric Fiselier         I i = m.erase(6);
425a83710eSEric Fiselier         assert(m.size() == 9);
435a83710eSEric Fiselier         assert(i == 0);
44*5ffe11a9SArthur O'Dwyer         assert(*std::next(m.begin(), 0) == 3);
45*5ffe11a9SArthur O'Dwyer         assert(*std::next(m.begin(), 1) == 3);
46*5ffe11a9SArthur O'Dwyer         assert(*std::next(m.begin(), 2) == 3);
47*5ffe11a9SArthur O'Dwyer         assert(*std::next(m.begin(), 3) == 5);
48*5ffe11a9SArthur O'Dwyer         assert(*std::next(m.begin(), 4) == 5);
49*5ffe11a9SArthur O'Dwyer         assert(*std::next(m.begin(), 5) == 5);
50*5ffe11a9SArthur O'Dwyer         assert(*std::next(m.begin(), 6) == 7);
51*5ffe11a9SArthur O'Dwyer         assert(*std::next(m.begin(), 7) == 7);
52*5ffe11a9SArthur O'Dwyer         assert(*std::next(m.begin(), 8) == 7);
535a83710eSEric Fiselier 
545a83710eSEric Fiselier         i = m.erase(5);
555a83710eSEric Fiselier         assert(m.size() == 6);
565a83710eSEric Fiselier         assert(i == 3);
57*5ffe11a9SArthur O'Dwyer         assert(*std::next(m.begin(), 0) == 3);
58*5ffe11a9SArthur O'Dwyer         assert(*std::next(m.begin(), 1) == 3);
59*5ffe11a9SArthur O'Dwyer         assert(*std::next(m.begin(), 2) == 3);
60*5ffe11a9SArthur O'Dwyer         assert(*std::next(m.begin(), 3) == 7);
61*5ffe11a9SArthur O'Dwyer         assert(*std::next(m.begin(), 4) == 7);
62*5ffe11a9SArthur O'Dwyer         assert(*std::next(m.begin(), 5) == 7);
635a83710eSEric Fiselier 
645a83710eSEric Fiselier         i = m.erase(3);
655a83710eSEric Fiselier         assert(m.size() == 3);
665a83710eSEric Fiselier         assert(i == 3);
67*5ffe11a9SArthur O'Dwyer         assert(*std::next(m.begin(), 0) == 7);
68*5ffe11a9SArthur O'Dwyer         assert(*std::next(m.begin(), 1) == 7);
69*5ffe11a9SArthur O'Dwyer         assert(*std::next(m.begin(), 2) == 7);
705a83710eSEric Fiselier 
715a83710eSEric Fiselier         i = m.erase(7);
725a83710eSEric Fiselier         assert(m.size() == 0);
735a83710eSEric Fiselier         assert(i == 3);
745a83710eSEric Fiselier     }
75f2f2a639SEric Fiselier #if TEST_STD_VER >= 11
765a83710eSEric Fiselier     {
775a83710eSEric Fiselier         typedef std::multiset<int, std::less<int>, min_allocator<int>> M;
785a83710eSEric Fiselier         typedef int V;
795a83710eSEric Fiselier         typedef M::size_type I;
805a83710eSEric Fiselier         V ar[] =
815a83710eSEric Fiselier         {
825a83710eSEric Fiselier             3,
835a83710eSEric Fiselier             3,
845a83710eSEric Fiselier             3,
855a83710eSEric Fiselier             5,
865a83710eSEric Fiselier             5,
875a83710eSEric Fiselier             5,
885a83710eSEric Fiselier             7,
895a83710eSEric Fiselier             7,
905a83710eSEric Fiselier             7
915a83710eSEric Fiselier         };
925a83710eSEric Fiselier         M m(ar, ar + sizeof(ar)/sizeof(ar[0]));
935a83710eSEric Fiselier         assert(m.size() == 9);
945a83710eSEric Fiselier         I i = m.erase(6);
955a83710eSEric Fiselier         assert(m.size() == 9);
965a83710eSEric Fiselier         assert(i == 0);
97*5ffe11a9SArthur O'Dwyer         assert(*std::next(m.begin(), 0) == 3);
98*5ffe11a9SArthur O'Dwyer         assert(*std::next(m.begin(), 1) == 3);
99*5ffe11a9SArthur O'Dwyer         assert(*std::next(m.begin(), 2) == 3);
100*5ffe11a9SArthur O'Dwyer         assert(*std::next(m.begin(), 3) == 5);
101*5ffe11a9SArthur O'Dwyer         assert(*std::next(m.begin(), 4) == 5);
102*5ffe11a9SArthur O'Dwyer         assert(*std::next(m.begin(), 5) == 5);
103*5ffe11a9SArthur O'Dwyer         assert(*std::next(m.begin(), 6) == 7);
104*5ffe11a9SArthur O'Dwyer         assert(*std::next(m.begin(), 7) == 7);
105*5ffe11a9SArthur O'Dwyer         assert(*std::next(m.begin(), 8) == 7);
1065a83710eSEric Fiselier 
1075a83710eSEric Fiselier         i = m.erase(5);
1085a83710eSEric Fiselier         assert(m.size() == 6);
1095a83710eSEric Fiselier         assert(i == 3);
110*5ffe11a9SArthur O'Dwyer         assert(*std::next(m.begin(), 0) == 3);
111*5ffe11a9SArthur O'Dwyer         assert(*std::next(m.begin(), 1) == 3);
112*5ffe11a9SArthur O'Dwyer         assert(*std::next(m.begin(), 2) == 3);
113*5ffe11a9SArthur O'Dwyer         assert(*std::next(m.begin(), 3) == 7);
114*5ffe11a9SArthur O'Dwyer         assert(*std::next(m.begin(), 4) == 7);
115*5ffe11a9SArthur O'Dwyer         assert(*std::next(m.begin(), 5) == 7);
1165a83710eSEric Fiselier 
1175a83710eSEric Fiselier         i = m.erase(3);
1185a83710eSEric Fiselier         assert(m.size() == 3);
1195a83710eSEric Fiselier         assert(i == 3);
120*5ffe11a9SArthur O'Dwyer         assert(*std::next(m.begin(), 0) == 7);
121*5ffe11a9SArthur O'Dwyer         assert(*std::next(m.begin(), 1) == 7);
122*5ffe11a9SArthur O'Dwyer         assert(*std::next(m.begin(), 2) == 7);
1235a83710eSEric Fiselier 
1245a83710eSEric Fiselier         i = m.erase(7);
1255a83710eSEric Fiselier         assert(m.size() == 0);
1265a83710eSEric Fiselier         assert(i == 3);
1275a83710eSEric Fiselier     }
1285a83710eSEric Fiselier #endif
1292df59c50SJF Bastien 
1302df59c50SJF Bastien   return 0;
1315a83710eSEric Fiselier }
132