blob: 12c1e283d119a21f2a41072fb7708131c8cb1569 [file] [log] [blame]
Howard Hinnantbc8d3f92010-05-11 19:42:16 +00001//===----------------------------------------------------------------------===//
2//
Howard Hinnantf5256e12010-05-11 21:36:01 +00003// The LLVM Compiler Infrastructure
Howard Hinnantbc8d3f92010-05-11 19:42:16 +00004//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9
10// <map>
11
12// class multimap
13
14// template <class... Args>
15// iterator emplace(Args&&... args);
16
17#include <map>
18#include <cassert>
19
20#include "../../../Emplaceable.h"
21#include "../../../DefaultOnly.h"
22
23int main()
24{
Howard Hinnant73d21a42010-09-04 23:28:19 +000025#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
Howard Hinnantbc8d3f92010-05-11 19:42:16 +000026 {
27 typedef std::multimap<int, DefaultOnly> M;
28 typedef M::iterator R;
29 M m;
30 assert(DefaultOnly::count == 0);
31 R r = m.emplace();
32 assert(r == m.begin());
33 assert(m.size() == 1);
34 assert(m.begin()->first == 0);
35 assert(m.begin()->second == DefaultOnly());
36 assert(DefaultOnly::count == 1);
37 r = m.emplace(1);
38 assert(r == next(m.begin()));
39 assert(m.size() == 2);
40 assert(next(m.begin())->first == 1);
41 assert(next(m.begin())->second == DefaultOnly());
42 assert(DefaultOnly::count == 2);
43 r = m.emplace(1);
44 assert(r == next(m.begin(), 2));
45 assert(m.size() == 3);
46 assert(next(m.begin(), 2)->first == 1);
47 assert(next(m.begin(), 2)->second == DefaultOnly());
48 assert(DefaultOnly::count == 3);
49 }
50 assert(DefaultOnly::count == 0);
51 {
52 typedef std::multimap<int, Emplaceable> M;
53 typedef M::iterator R;
54 M m;
55 R r = m.emplace(2);
56 assert(r == m.begin());
57 assert(m.size() == 1);
58 assert(m.begin()->first == 2);
59 assert(m.begin()->second == Emplaceable());
60 r = m.emplace(1, 2, 3.5);
61 assert(r == m.begin());
62 assert(m.size() == 2);
63 assert(m.begin()->first == 1);
64 assert(m.begin()->second == Emplaceable(2, 3.5));
65 r = m.emplace(1, 3, 3.5);
66 assert(r == next(m.begin()));
67 assert(m.size() == 3);
68 assert(r->first == 1);
69 assert(r->second == Emplaceable(3, 3.5));
70 }
71 {
72 typedef std::multimap<int, double> M;
73 typedef M::iterator R;
74 M m;
75 R r = m.emplace(M::value_type(2, 3.5));
76 assert(r == m.begin());
77 assert(m.size() == 1);
78 assert(m.begin()->first == 2);
79 assert(m.begin()->second == 3.5);
80 }
Howard Hinnant73d21a42010-09-04 23:28:19 +000081#endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES
Howard Hinnantbc8d3f92010-05-11 19:42:16 +000082}