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 //   void insert(InputIterator first, InputIterator last);
155a83710eSEric Fiselier 
165a83710eSEric Fiselier #include <map>
175a83710eSEric Fiselier #include <cassert>
185a83710eSEric Fiselier 
197fc6a556SMarshall Clow #include "test_macros.h"
205a83710eSEric Fiselier #include "test_iterators.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::multimap<int, double> M;
275a83710eSEric Fiselier         typedef std::pair<int, double> P;
285a83710eSEric Fiselier         P ar[] =
295a83710eSEric Fiselier         {
305a83710eSEric Fiselier             P(1, 1),
315a83710eSEric Fiselier             P(1, 1.5),
325a83710eSEric Fiselier             P(1, 2),
335a83710eSEric Fiselier             P(2, 1),
345a83710eSEric Fiselier             P(2, 1.5),
355a83710eSEric Fiselier             P(2, 2),
365a83710eSEric Fiselier             P(3, 1),
375a83710eSEric Fiselier             P(3, 1.5),
385a83710eSEric Fiselier             P(3, 2),
395a83710eSEric Fiselier         };
405a83710eSEric Fiselier         M m;
41773ae441SChristopher Di Bella         m.insert(cpp17_input_iterator<P*>(ar), cpp17_input_iterator<P*>(ar + sizeof(ar)/sizeof(ar[0])));
425a83710eSEric Fiselier         assert(m.size() == 9);
435a83710eSEric Fiselier         assert(m.begin()->first == 1);
445a83710eSEric Fiselier         assert(m.begin()->second == 1);
45*5ffe11a9SArthur O'Dwyer         assert(std::next(m.begin())->first == 1);
46*5ffe11a9SArthur O'Dwyer         assert(std::next(m.begin())->second == 1.5);
47*5ffe11a9SArthur O'Dwyer         assert(std::next(m.begin(), 2)->first == 1);
48*5ffe11a9SArthur O'Dwyer         assert(std::next(m.begin(), 2)->second == 2);
49*5ffe11a9SArthur O'Dwyer         assert(std::next(m.begin(), 3)->first == 2);
50*5ffe11a9SArthur O'Dwyer         assert(std::next(m.begin(), 3)->second == 1);
51*5ffe11a9SArthur O'Dwyer         assert(std::next(m.begin(), 4)->first == 2);
52*5ffe11a9SArthur O'Dwyer         assert(std::next(m.begin(), 4)->second == 1.5);
53*5ffe11a9SArthur O'Dwyer         assert(std::next(m.begin(), 5)->first == 2);
54*5ffe11a9SArthur O'Dwyer         assert(std::next(m.begin(), 5)->second == 2);
55*5ffe11a9SArthur O'Dwyer         assert(std::next(m.begin(), 6)->first == 3);
56*5ffe11a9SArthur O'Dwyer         assert(std::next(m.begin(), 6)->second == 1);
57*5ffe11a9SArthur O'Dwyer         assert(std::next(m.begin(), 7)->first == 3);
58*5ffe11a9SArthur O'Dwyer         assert(std::next(m.begin(), 7)->second == 1.5);
59*5ffe11a9SArthur O'Dwyer         assert(std::next(m.begin(), 8)->first == 3);
60*5ffe11a9SArthur O'Dwyer         assert(std::next(m.begin(), 8)->second == 2);
615a83710eSEric Fiselier     }
62f2f2a639SEric Fiselier #if TEST_STD_VER >= 11
635a83710eSEric Fiselier     {
645a83710eSEric Fiselier         typedef std::multimap<int, double, std::less<int>, min_allocator<std::pair<const int, double>>> M;
655a83710eSEric Fiselier         typedef std::pair<int, double> P;
665a83710eSEric Fiselier         P ar[] =
675a83710eSEric Fiselier         {
685a83710eSEric Fiselier             P(1, 1),
695a83710eSEric Fiselier             P(1, 1.5),
705a83710eSEric Fiselier             P(1, 2),
715a83710eSEric Fiselier             P(2, 1),
725a83710eSEric Fiselier             P(2, 1.5),
735a83710eSEric Fiselier             P(2, 2),
745a83710eSEric Fiselier             P(3, 1),
755a83710eSEric Fiselier             P(3, 1.5),
765a83710eSEric Fiselier             P(3, 2),
775a83710eSEric Fiselier         };
785a83710eSEric Fiselier         M m;
79773ae441SChristopher Di Bella         m.insert(cpp17_input_iterator<P*>(ar), cpp17_input_iterator<P*>(ar + sizeof(ar)/sizeof(ar[0])));
805a83710eSEric Fiselier         assert(m.size() == 9);
815a83710eSEric Fiselier         assert(m.begin()->first == 1);
825a83710eSEric Fiselier         assert(m.begin()->second == 1);
83*5ffe11a9SArthur O'Dwyer         assert(std::next(m.begin())->first == 1);
84*5ffe11a9SArthur O'Dwyer         assert(std::next(m.begin())->second == 1.5);
85*5ffe11a9SArthur O'Dwyer         assert(std::next(m.begin(), 2)->first == 1);
86*5ffe11a9SArthur O'Dwyer         assert(std::next(m.begin(), 2)->second == 2);
87*5ffe11a9SArthur O'Dwyer         assert(std::next(m.begin(), 3)->first == 2);
88*5ffe11a9SArthur O'Dwyer         assert(std::next(m.begin(), 3)->second == 1);
89*5ffe11a9SArthur O'Dwyer         assert(std::next(m.begin(), 4)->first == 2);
90*5ffe11a9SArthur O'Dwyer         assert(std::next(m.begin(), 4)->second == 1.5);
91*5ffe11a9SArthur O'Dwyer         assert(std::next(m.begin(), 5)->first == 2);
92*5ffe11a9SArthur O'Dwyer         assert(std::next(m.begin(), 5)->second == 2);
93*5ffe11a9SArthur O'Dwyer         assert(std::next(m.begin(), 6)->first == 3);
94*5ffe11a9SArthur O'Dwyer         assert(std::next(m.begin(), 6)->second == 1);
95*5ffe11a9SArthur O'Dwyer         assert(std::next(m.begin(), 7)->first == 3);
96*5ffe11a9SArthur O'Dwyer         assert(std::next(m.begin(), 7)->second == 1.5);
97*5ffe11a9SArthur O'Dwyer         assert(std::next(m.begin(), 8)->first == 3);
98*5ffe11a9SArthur O'Dwyer         assert(std::next(m.begin(), 8)->second == 2);
995a83710eSEric Fiselier     }
1005a83710eSEric Fiselier #endif
1012df59c50SJF Bastien 
1022df59c50SJF Bastien   return 0;
1035a83710eSEric Fiselier }
104