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
931cbe0f2SLouis Dionne // UNSUPPORTED: c++03
1018293116SEric Fiselier
115a83710eSEric Fiselier // <map>
125a83710eSEric Fiselier
135a83710eSEric Fiselier // class map
145a83710eSEric Fiselier
155a83710eSEric Fiselier // map& operator=(map&& m);
165a83710eSEric Fiselier
175a83710eSEric Fiselier #include <map>
185a83710eSEric Fiselier #include <cassert>
195a83710eSEric Fiselier
207fc6a556SMarshall Clow #include "test_macros.h"
21949389c3SMarshall Clow #include "MoveOnly.h"
225a83710eSEric Fiselier #include "../../../test_compare.h"
235a83710eSEric Fiselier #include "test_allocator.h"
245a83710eSEric Fiselier #include "min_allocator.h"
255a83710eSEric Fiselier
main(int,char **)262df59c50SJF Bastien int main(int, char**)
275a83710eSEric Fiselier {
285a83710eSEric Fiselier {
295a83710eSEric Fiselier typedef std::pair<MoveOnly, MoveOnly> V;
305a83710eSEric Fiselier typedef std::pair<const MoveOnly, MoveOnly> VC;
31*5cc55fdbSArthur O'Dwyer typedef test_less<MoveOnly> C;
325a83710eSEric Fiselier typedef test_allocator<VC> A;
335a83710eSEric Fiselier typedef std::map<MoveOnly, MoveOnly, C, A> M;
345a83710eSEric Fiselier typedef std::move_iterator<V*> I;
355a83710eSEric Fiselier V a1[] =
365a83710eSEric Fiselier {
375a83710eSEric Fiselier V(1, 1),
385a83710eSEric Fiselier V(1, 2),
395a83710eSEric Fiselier V(1, 3),
405a83710eSEric Fiselier V(2, 1),
415a83710eSEric Fiselier V(2, 2),
425a83710eSEric Fiselier V(2, 3),
435a83710eSEric Fiselier V(3, 1),
445a83710eSEric Fiselier V(3, 2),
455a83710eSEric Fiselier V(3, 3)
465a83710eSEric Fiselier };
475a83710eSEric Fiselier M m1(I(a1), I(a1+sizeof(a1)/sizeof(a1[0])), C(5), A(7));
485a83710eSEric Fiselier V a2[] =
495a83710eSEric Fiselier {
505a83710eSEric Fiselier V(1, 1),
515a83710eSEric Fiselier V(1, 2),
525a83710eSEric Fiselier V(1, 3),
535a83710eSEric Fiselier V(2, 1),
545a83710eSEric Fiselier V(2, 2),
555a83710eSEric Fiselier V(2, 3),
565a83710eSEric Fiselier V(3, 1),
575a83710eSEric Fiselier V(3, 2),
585a83710eSEric Fiselier V(3, 3)
595a83710eSEric Fiselier };
605a83710eSEric Fiselier M m2(I(a2), I(a2+sizeof(a2)/sizeof(a2[0])), C(5), A(7));
615a83710eSEric Fiselier M m3(C(3), A(7));
625a83710eSEric Fiselier m3 = std::move(m1);
635a83710eSEric Fiselier assert(m3 == m2);
645a83710eSEric Fiselier assert(m3.get_allocator() == A(7));
655a83710eSEric Fiselier assert(m3.key_comp() == C(5));
665a83710eSEric Fiselier assert(m1.empty());
675a83710eSEric Fiselier }
685a83710eSEric Fiselier {
695a83710eSEric Fiselier typedef std::pair<MoveOnly, MoveOnly> V;
705a83710eSEric Fiselier typedef std::pair<const MoveOnly, MoveOnly> VC;
71*5cc55fdbSArthur O'Dwyer typedef test_less<MoveOnly> C;
725a83710eSEric Fiselier typedef test_allocator<VC> A;
735a83710eSEric Fiselier typedef std::map<MoveOnly, MoveOnly, C, A> M;
745a83710eSEric Fiselier typedef std::move_iterator<V*> I;
755a83710eSEric Fiselier V a1[] =
765a83710eSEric Fiselier {
775a83710eSEric Fiselier V(1, 1),
785a83710eSEric Fiselier V(1, 2),
795a83710eSEric Fiselier V(1, 3),
805a83710eSEric Fiselier V(2, 1),
815a83710eSEric Fiselier V(2, 2),
825a83710eSEric Fiselier V(2, 3),
835a83710eSEric Fiselier V(3, 1),
845a83710eSEric Fiselier V(3, 2),
855a83710eSEric Fiselier V(3, 3)
865a83710eSEric Fiselier };
875a83710eSEric Fiselier M m1(I(a1), I(a1+sizeof(a1)/sizeof(a1[0])), C(5), A(7));
885a83710eSEric Fiselier V a2[] =
895a83710eSEric Fiselier {
905a83710eSEric Fiselier V(1, 1),
915a83710eSEric Fiselier V(1, 2),
925a83710eSEric Fiselier V(1, 3),
935a83710eSEric Fiselier V(2, 1),
945a83710eSEric Fiselier V(2, 2),
955a83710eSEric Fiselier V(2, 3),
965a83710eSEric Fiselier V(3, 1),
975a83710eSEric Fiselier V(3, 2),
985a83710eSEric Fiselier V(3, 3)
995a83710eSEric Fiselier };
1005a83710eSEric Fiselier M m2(I(a2), I(a2+sizeof(a2)/sizeof(a2[0])), C(5), A(7));
1015a83710eSEric Fiselier M m3(C(3), A(5));
1025a83710eSEric Fiselier m3 = std::move(m1);
1035a83710eSEric Fiselier assert(m3 == m2);
1045a83710eSEric Fiselier assert(m3.get_allocator() == A(5));
1055a83710eSEric Fiselier assert(m3.key_comp() == C(5));
10645f630d7SBilly Robert O'Neal III LIBCPP_ASSERT(m1.empty());
1075a83710eSEric Fiselier }
1085a83710eSEric Fiselier {
1095a83710eSEric Fiselier typedef std::pair<MoveOnly, MoveOnly> V;
1105a83710eSEric Fiselier typedef std::pair<const MoveOnly, MoveOnly> VC;
111*5cc55fdbSArthur O'Dwyer typedef test_less<MoveOnly> C;
1125a83710eSEric Fiselier typedef other_allocator<VC> A;
1135a83710eSEric Fiselier typedef std::map<MoveOnly, MoveOnly, C, A> M;
1145a83710eSEric Fiselier typedef std::move_iterator<V*> I;
1155a83710eSEric Fiselier V a1[] =
1165a83710eSEric Fiselier {
1175a83710eSEric Fiselier V(1, 1),
1185a83710eSEric Fiselier V(1, 2),
1195a83710eSEric Fiselier V(1, 3),
1205a83710eSEric Fiselier V(2, 1),
1215a83710eSEric Fiselier V(2, 2),
1225a83710eSEric Fiselier V(2, 3),
1235a83710eSEric Fiselier V(3, 1),
1245a83710eSEric Fiselier V(3, 2),
1255a83710eSEric Fiselier V(3, 3)
1265a83710eSEric Fiselier };
1275a83710eSEric Fiselier M m1(I(a1), I(a1+sizeof(a1)/sizeof(a1[0])), C(5), A(7));
1285a83710eSEric Fiselier V a2[] =
1295a83710eSEric Fiselier {
1305a83710eSEric Fiselier V(1, 1),
1315a83710eSEric Fiselier V(1, 2),
1325a83710eSEric Fiselier V(1, 3),
1335a83710eSEric Fiselier V(2, 1),
1345a83710eSEric Fiselier V(2, 2),
1355a83710eSEric Fiselier V(2, 3),
1365a83710eSEric Fiselier V(3, 1),
1375a83710eSEric Fiselier V(3, 2),
1385a83710eSEric Fiselier V(3, 3)
1395a83710eSEric Fiselier };
1405a83710eSEric Fiselier M m2(I(a2), I(a2+sizeof(a2)/sizeof(a2[0])), C(5), A(7));
1415a83710eSEric Fiselier M m3(C(3), A(5));
1425a83710eSEric Fiselier m3 = std::move(m1);
1435a83710eSEric Fiselier assert(m3 == m2);
1445a83710eSEric Fiselier assert(m3.get_allocator() == A(7));
1455a83710eSEric Fiselier assert(m3.key_comp() == C(5));
1465a83710eSEric Fiselier assert(m1.empty());
1475a83710eSEric Fiselier }
1485a83710eSEric Fiselier {
1495a83710eSEric Fiselier typedef std::pair<MoveOnly, MoveOnly> V;
1505a83710eSEric Fiselier typedef std::pair<const MoveOnly, MoveOnly> VC;
151*5cc55fdbSArthur O'Dwyer typedef test_less<MoveOnly> C;
1525a83710eSEric Fiselier typedef min_allocator<VC> A;
1535a83710eSEric Fiselier typedef std::map<MoveOnly, MoveOnly, C, A> M;
1545a83710eSEric Fiselier typedef std::move_iterator<V*> I;
1555a83710eSEric Fiselier V a1[] =
1565a83710eSEric Fiselier {
1575a83710eSEric Fiselier V(1, 1),
1585a83710eSEric Fiselier V(1, 2),
1595a83710eSEric Fiselier V(1, 3),
1605a83710eSEric Fiselier V(2, 1),
1615a83710eSEric Fiselier V(2, 2),
1625a83710eSEric Fiselier V(2, 3),
1635a83710eSEric Fiselier V(3, 1),
1645a83710eSEric Fiselier V(3, 2),
1655a83710eSEric Fiselier V(3, 3)
1665a83710eSEric Fiselier };
1675a83710eSEric Fiselier M m1(I(a1), I(a1+sizeof(a1)/sizeof(a1[0])), C(5), A());
1685a83710eSEric Fiselier V a2[] =
1695a83710eSEric Fiselier {
1705a83710eSEric Fiselier V(1, 1),
1715a83710eSEric Fiselier V(1, 2),
1725a83710eSEric Fiselier V(1, 3),
1735a83710eSEric Fiselier V(2, 1),
1745a83710eSEric Fiselier V(2, 2),
1755a83710eSEric Fiselier V(2, 3),
1765a83710eSEric Fiselier V(3, 1),
1775a83710eSEric Fiselier V(3, 2),
1785a83710eSEric Fiselier V(3, 3)
1795a83710eSEric Fiselier };
1805a83710eSEric Fiselier M m2(I(a2), I(a2+sizeof(a2)/sizeof(a2[0])), C(5), A());
1815a83710eSEric Fiselier M m3(C(3), A());
1825a83710eSEric Fiselier m3 = std::move(m1);
1835a83710eSEric Fiselier assert(m3 == m2);
1845a83710eSEric Fiselier assert(m3.get_allocator() == A());
1855a83710eSEric Fiselier assert(m3.key_comp() == C(5));
1865a83710eSEric Fiselier assert(m1.empty());
1875a83710eSEric Fiselier }
1882df59c50SJF Bastien
1892df59c50SJF Bastien return 0;
1905a83710eSEric Fiselier }
191