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 // iterator insert(const value_type& v);
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 
21ba0543b3SEric Fiselier template<class Container>
do_insert_cv_test()22ba0543b3SEric Fiselier void do_insert_cv_test()
235a83710eSEric Fiselier {
24ba0543b3SEric Fiselier     typedef Container M;
25ba0543b3SEric Fiselier     typedef typename M::iterator R;
26ba0543b3SEric Fiselier     typedef typename M::value_type VT;
275a83710eSEric Fiselier     M m;
28ba0543b3SEric Fiselier     const VT v1(2);
29ba0543b3SEric Fiselier     R r = m.insert(v1);
305a83710eSEric Fiselier     assert(r == m.begin());
315a83710eSEric Fiselier     assert(m.size() == 1);
325a83710eSEric Fiselier     assert(*r == 2);
335a83710eSEric Fiselier 
34ba0543b3SEric Fiselier     const VT v2(1);
35ba0543b3SEric Fiselier     r = m.insert(v2);
365a83710eSEric Fiselier     assert(r == m.begin());
375a83710eSEric Fiselier     assert(m.size() == 2);
385a83710eSEric Fiselier     assert(*r == 1);
395a83710eSEric Fiselier 
40ba0543b3SEric Fiselier     const VT v3(3);
41ba0543b3SEric Fiselier     r = m.insert(v3);
42*3b966c1fSArthur O'Dwyer     assert(r == std::prev(m.end()));
435a83710eSEric Fiselier     assert(m.size() == 3);
445a83710eSEric Fiselier     assert(*r == 3);
455a83710eSEric Fiselier 
46ba0543b3SEric Fiselier     r = m.insert(v3);
47*3b966c1fSArthur O'Dwyer     assert(r == std::prev(m.end()));
485a83710eSEric Fiselier     assert(m.size() == 4);
495a83710eSEric Fiselier     assert(*r == 3);
505a83710eSEric Fiselier }
51ba0543b3SEric Fiselier 
main(int,char **)522df59c50SJF Bastien int main(int, char**)
53ba0543b3SEric Fiselier {
54ba0543b3SEric Fiselier     do_insert_cv_test<std::multiset<int> >();
55f2f2a639SEric Fiselier #if TEST_STD_VER >= 11
565a83710eSEric Fiselier     {
575a83710eSEric Fiselier         typedef std::multiset<int, std::less<int>, min_allocator<int>> M;
58ba0543b3SEric Fiselier         do_insert_cv_test<M>();
595a83710eSEric Fiselier     }
605a83710eSEric Fiselier #endif
612df59c50SJF Bastien 
622df59c50SJF Bastien   return 0;
635a83710eSEric Fiselier }
64