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 multimap
125a83710eSEric Fiselier 
135a83710eSEric Fiselier // template <class InputIterator>
145a83710eSEric Fiselier //     multimap(InputIterator first, InputIterator last);
155a83710eSEric Fiselier 
165a83710eSEric Fiselier #include <map>
175a83710eSEric Fiselier #include <cassert>
185a83710eSEric Fiselier 
190f901c7eSStephan T. Lavavej #include "test_macros.h"
205a83710eSEric Fiselier #include "min_allocator.h"
215a83710eSEric Fiselier 
main(int,char **)222df59c50SJF Bastien int main(int, char**)
235a83710eSEric Fiselier {
245a83710eSEric Fiselier     {
255a83710eSEric Fiselier     typedef std::pair<const int, double> V;
265a83710eSEric Fiselier     V ar[] =
275a83710eSEric Fiselier     {
285a83710eSEric Fiselier         V(1, 1),
295a83710eSEric Fiselier         V(1, 1.5),
305a83710eSEric Fiselier         V(1, 2),
315a83710eSEric Fiselier         V(2, 1),
325a83710eSEric Fiselier         V(2, 1.5),
335a83710eSEric Fiselier         V(2, 2),
345a83710eSEric Fiselier         V(3, 1),
355a83710eSEric Fiselier         V(3, 1.5),
365a83710eSEric Fiselier         V(3, 2),
375a83710eSEric Fiselier     };
385a83710eSEric Fiselier     std::multimap<int, double> m(ar, ar+sizeof(ar)/sizeof(ar[0]));
395a83710eSEric Fiselier     assert(m.size() == 9);
40f33d7493SArthur O'Dwyer     assert(std::distance(m.begin(), m.end()) == 9);
415a83710eSEric Fiselier     assert(*m.begin() == V(1, 1));
42*5ffe11a9SArthur O'Dwyer     assert(*std::next(m.begin()) == V(1, 1.5));
43*5ffe11a9SArthur O'Dwyer     assert(*std::next(m.begin(), 2) == V(1, 2));
44*5ffe11a9SArthur O'Dwyer     assert(*std::next(m.begin(), 3) == V(2, 1));
45*5ffe11a9SArthur O'Dwyer     assert(*std::next(m.begin(), 4) == V(2, 1.5));
46*5ffe11a9SArthur O'Dwyer     assert(*std::next(m.begin(), 5) == V(2, 2));
47*5ffe11a9SArthur O'Dwyer     assert(*std::next(m.begin(), 6) == V(3, 1));
48*5ffe11a9SArthur O'Dwyer     assert(*std::next(m.begin(), 7) == V(3, 1.5));
49*5ffe11a9SArthur O'Dwyer     assert(*std::next(m.begin(), 8) == V(3, 2));
505a83710eSEric Fiselier     }
51f2f2a639SEric Fiselier #if TEST_STD_VER >= 11
525a83710eSEric Fiselier     {
535a83710eSEric Fiselier     typedef std::pair<const int, double> V;
545a83710eSEric Fiselier     V ar[] =
555a83710eSEric Fiselier     {
565a83710eSEric Fiselier         V(1, 1),
575a83710eSEric Fiselier         V(1, 1.5),
585a83710eSEric Fiselier         V(1, 2),
595a83710eSEric Fiselier         V(2, 1),
605a83710eSEric Fiselier         V(2, 1.5),
615a83710eSEric Fiselier         V(2, 2),
625a83710eSEric Fiselier         V(3, 1),
635a83710eSEric Fiselier         V(3, 1.5),
645a83710eSEric Fiselier         V(3, 2),
655a83710eSEric Fiselier     };
665a83710eSEric Fiselier     std::multimap<int, double, std::less<int>, min_allocator<V>> m(ar, ar+sizeof(ar)/sizeof(ar[0]));
675a83710eSEric Fiselier     assert(m.size() == 9);
68f33d7493SArthur O'Dwyer     assert(std::distance(m.begin(), m.end()) == 9);
695a83710eSEric Fiselier     assert(*m.begin() == V(1, 1));
70*5ffe11a9SArthur O'Dwyer     assert(*std::next(m.begin()) == V(1, 1.5));
71*5ffe11a9SArthur O'Dwyer     assert(*std::next(m.begin(), 2) == V(1, 2));
72*5ffe11a9SArthur O'Dwyer     assert(*std::next(m.begin(), 3) == V(2, 1));
73*5ffe11a9SArthur O'Dwyer     assert(*std::next(m.begin(), 4) == V(2, 1.5));
74*5ffe11a9SArthur O'Dwyer     assert(*std::next(m.begin(), 5) == V(2, 2));
75*5ffe11a9SArthur O'Dwyer     assert(*std::next(m.begin(), 6) == V(3, 1));
76*5ffe11a9SArthur O'Dwyer     assert(*std::next(m.begin(), 7) == V(3, 1.5));
77*5ffe11a9SArthur O'Dwyer     assert(*std::next(m.begin(), 8) == V(3, 2));
785a83710eSEric Fiselier     }
790f901c7eSStephan T. Lavavej #if TEST_STD_VER > 11
805a83710eSEric Fiselier     {
815a83710eSEric Fiselier     typedef std::pair<const int, double> V;
825a83710eSEric Fiselier     V ar[] =
835a83710eSEric Fiselier     {
845a83710eSEric Fiselier         V(1, 1),
855a83710eSEric Fiselier         V(1, 1.5),
865a83710eSEric Fiselier         V(1, 2),
875a83710eSEric Fiselier         V(2, 1),
885a83710eSEric Fiselier         V(2, 1.5),
895a83710eSEric Fiselier         V(2, 2),
905a83710eSEric Fiselier         V(3, 1),
915a83710eSEric Fiselier         V(3, 1.5),
925a83710eSEric Fiselier         V(3, 2),
935a83710eSEric Fiselier     };
945a83710eSEric Fiselier     typedef min_allocator<std::pair<const int, double>> A;
955a83710eSEric Fiselier     A a;
965a83710eSEric Fiselier     std::multimap<int, double, std::less<int>, A> m(ar, ar+sizeof(ar)/sizeof(ar[0]), a);
975a83710eSEric Fiselier     assert(m.size() == 9);
98f33d7493SArthur O'Dwyer     assert(std::distance(m.begin(), m.end()) == 9);
995a83710eSEric Fiselier     assert(*m.begin() == V(1, 1));
100*5ffe11a9SArthur O'Dwyer     assert(*std::next(m.begin()) == V(1, 1.5));
101*5ffe11a9SArthur O'Dwyer     assert(*std::next(m.begin(), 2) == V(1, 2));
102*5ffe11a9SArthur O'Dwyer     assert(*std::next(m.begin(), 3) == V(2, 1));
103*5ffe11a9SArthur O'Dwyer     assert(*std::next(m.begin(), 4) == V(2, 1.5));
104*5ffe11a9SArthur O'Dwyer     assert(*std::next(m.begin(), 5) == V(2, 2));
105*5ffe11a9SArthur O'Dwyer     assert(*std::next(m.begin(), 6) == V(3, 1));
106*5ffe11a9SArthur O'Dwyer     assert(*std::next(m.begin(), 7) == V(3, 1.5));
107*5ffe11a9SArthur O'Dwyer     assert(*std::next(m.begin(), 8) == V(3, 2));
1085a83710eSEric Fiselier     assert(m.get_allocator() == a);
1095a83710eSEric Fiselier     }
1105a83710eSEric Fiselier #endif
1115a83710eSEric Fiselier #endif
1122df59c50SJF Bastien 
1132df59c50SJF Bastien   return 0;
1145a83710eSEric Fiselier }
115