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 // <map>
105a83710eSEric Fiselier
115a83710eSEric Fiselier // class map
125a83710eSEric Fiselier
135a83710eSEric Fiselier // map(const map& m, const allocator_type& a);
145a83710eSEric Fiselier
155a83710eSEric Fiselier #include <map>
165a83710eSEric Fiselier #include <cassert>
175a83710eSEric Fiselier
187fc6a556SMarshall Clow #include "test_macros.h"
195a83710eSEric Fiselier #include "../../../test_compare.h"
205a83710eSEric Fiselier #include "test_allocator.h"
215a83710eSEric Fiselier #include "min_allocator.h"
225a83710eSEric Fiselier
main(int,char **)232df59c50SJF Bastien int main(int, char**)
245a83710eSEric Fiselier {
255a83710eSEric Fiselier {
265a83710eSEric Fiselier typedef std::pair<const int, double> V;
275a83710eSEric Fiselier V ar[] =
285a83710eSEric Fiselier {
295a83710eSEric Fiselier V(1, 1),
305a83710eSEric Fiselier V(1, 1.5),
315a83710eSEric Fiselier V(1, 2),
325a83710eSEric Fiselier V(2, 1),
335a83710eSEric Fiselier V(2, 1.5),
345a83710eSEric Fiselier V(2, 2),
355a83710eSEric Fiselier V(3, 1),
365a83710eSEric Fiselier V(3, 1.5),
375a83710eSEric Fiselier V(3, 2),
385a83710eSEric Fiselier };
395cc55fdbSArthur O'Dwyer typedef test_less<int> C;
405a83710eSEric Fiselier typedef test_allocator<V> A;
415a83710eSEric Fiselier std::map<int, double, C, A> mo(ar, ar+sizeof(ar)/sizeof(ar[0]), C(5), A(7));
425a83710eSEric Fiselier std::map<int, double, C, A> m(mo, A(3));
435a83710eSEric Fiselier assert(m.get_allocator() == A(3));
445a83710eSEric Fiselier assert(m.key_comp() == C(5));
455a83710eSEric Fiselier assert(m.size() == 3);
46f33d7493SArthur O'Dwyer assert(std::distance(m.begin(), m.end()) == 3);
475a83710eSEric Fiselier assert(*m.begin() == V(1, 1));
48*5ffe11a9SArthur O'Dwyer assert(*std::next(m.begin()) == V(2, 1));
49*5ffe11a9SArthur O'Dwyer assert(*std::next(m.begin(), 2) == V(3, 1));
505a83710eSEric Fiselier
515a83710eSEric Fiselier assert(mo.get_allocator() == A(7));
525a83710eSEric Fiselier assert(mo.key_comp() == C(5));
535a83710eSEric Fiselier assert(mo.size() == 3);
54f33d7493SArthur O'Dwyer assert(std::distance(mo.begin(), mo.end()) == 3);
555a83710eSEric Fiselier assert(*mo.begin() == V(1, 1));
56*5ffe11a9SArthur O'Dwyer assert(*std::next(mo.begin()) == V(2, 1));
57*5ffe11a9SArthur O'Dwyer assert(*std::next(mo.begin(), 2) == V(3, 1));
585a83710eSEric Fiselier }
59f2f2a639SEric Fiselier #if TEST_STD_VER >= 11
605a83710eSEric Fiselier {
615a83710eSEric Fiselier typedef std::pair<const int, double> V;
625a83710eSEric Fiselier V ar[] =
635a83710eSEric Fiselier {
645a83710eSEric Fiselier V(1, 1),
655a83710eSEric Fiselier V(1, 1.5),
665a83710eSEric Fiselier V(1, 2),
675a83710eSEric Fiselier V(2, 1),
685a83710eSEric Fiselier V(2, 1.5),
695a83710eSEric Fiselier V(2, 2),
705a83710eSEric Fiselier V(3, 1),
715a83710eSEric Fiselier V(3, 1.5),
725a83710eSEric Fiselier V(3, 2),
735a83710eSEric Fiselier };
745cc55fdbSArthur O'Dwyer typedef test_less<int> C;
755a83710eSEric Fiselier typedef min_allocator<V> A;
765a83710eSEric Fiselier std::map<int, double, C, A> mo(ar, ar+sizeof(ar)/sizeof(ar[0]), C(5), A());
775a83710eSEric Fiselier std::map<int, double, C, A> m(mo, A());
785a83710eSEric Fiselier assert(m.get_allocator() == A());
795a83710eSEric Fiselier assert(m.key_comp() == C(5));
805a83710eSEric Fiselier assert(m.size() == 3);
81f33d7493SArthur O'Dwyer assert(std::distance(m.begin(), m.end()) == 3);
825a83710eSEric Fiselier assert(*m.begin() == V(1, 1));
83*5ffe11a9SArthur O'Dwyer assert(*std::next(m.begin()) == V(2, 1));
84*5ffe11a9SArthur O'Dwyer assert(*std::next(m.begin(), 2) == V(3, 1));
855a83710eSEric Fiselier
865a83710eSEric Fiselier assert(mo.get_allocator() == A());
875a83710eSEric Fiselier assert(mo.key_comp() == C(5));
885a83710eSEric Fiselier assert(mo.size() == 3);
89f33d7493SArthur O'Dwyer assert(std::distance(mo.begin(), mo.end()) == 3);
905a83710eSEric Fiselier assert(*mo.begin() == V(1, 1));
91*5ffe11a9SArthur O'Dwyer assert(*std::next(mo.begin()) == V(2, 1));
92*5ffe11a9SArthur O'Dwyer assert(*std::next(mo.begin(), 2) == V(3, 1));
935a83710eSEric Fiselier }
942a10c960SMarshall Clow {
952a10c960SMarshall Clow typedef std::pair<const int, double> V;
962a10c960SMarshall Clow V ar[] =
972a10c960SMarshall Clow {
982a10c960SMarshall Clow V(1, 1),
992a10c960SMarshall Clow V(1, 1.5),
1002a10c960SMarshall Clow V(1, 2),
1012a10c960SMarshall Clow V(2, 1),
1022a10c960SMarshall Clow V(2, 1.5),
1032a10c960SMarshall Clow V(2, 2),
1042a10c960SMarshall Clow V(3, 1),
1052a10c960SMarshall Clow V(3, 1.5),
1062a10c960SMarshall Clow V(3, 2),
1072a10c960SMarshall Clow };
1085cc55fdbSArthur O'Dwyer typedef test_less<int> C;
1092a10c960SMarshall Clow typedef explicit_allocator<V> A;
1102a10c960SMarshall Clow std::map<int, double, C, A> mo(ar, ar+sizeof(ar)/sizeof(ar[0]), C(5), A{});
1112a10c960SMarshall Clow std::map<int, double, C, A> m(mo, A{});
1122a10c960SMarshall Clow assert(m.get_allocator() == A());
1132a10c960SMarshall Clow assert(m.key_comp() == C(5));
1142a10c960SMarshall Clow assert(m.size() == 3);
115f33d7493SArthur O'Dwyer assert(std::distance(m.begin(), m.end()) == 3);
1162a10c960SMarshall Clow assert(*m.begin() == V(1, 1));
117*5ffe11a9SArthur O'Dwyer assert(*std::next(m.begin()) == V(2, 1));
118*5ffe11a9SArthur O'Dwyer assert(*std::next(m.begin(), 2) == V(3, 1));
1192a10c960SMarshall Clow
1202a10c960SMarshall Clow assert(mo.get_allocator() == A());
1212a10c960SMarshall Clow assert(mo.key_comp() == C(5));
1222a10c960SMarshall Clow assert(mo.size() == 3);
123f33d7493SArthur O'Dwyer assert(std::distance(mo.begin(), mo.end()) == 3);
1242a10c960SMarshall Clow assert(*mo.begin() == V(1, 1));
125*5ffe11a9SArthur O'Dwyer assert(*std::next(mo.begin()) == V(2, 1));
126*5ffe11a9SArthur O'Dwyer assert(*std::next(mo.begin(), 2) == V(3, 1));
1272a10c960SMarshall Clow }
1285a83710eSEric Fiselier #endif
1292df59c50SJF Bastien
1302df59c50SJF Bastien return 0;
1315a83710eSEric Fiselier }
132