1 //===----------------------------------------------------------------------===//
2 //
3 // The LLVM Compiler Infrastructure
4 //
5 // This file is dual licensed under the MIT and the University of Illinois Open
6 // Source Licenses. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9
10 // <map>
11
12 // class multimap
13
14 // size_type count(const key_type& k) const;
15
16 #include <map>
17 #include <cassert>
18
19 #include "min_allocator.h"
20 #include "private_constructor.hpp"
21
main()22 int main()
23 {
24 typedef std::pair<const int, double> V;
25 {
26 typedef std::multimap<int, double> M;
27 {
28 typedef M::size_type R;
29 V ar[] =
30 {
31 V(5, 1),
32 V(5, 2),
33 V(5, 3),
34 V(7, 1),
35 V(7, 2),
36 V(7, 3),
37 V(9, 1),
38 V(9, 2),
39 V(9, 3)
40 };
41 const M m(ar, ar+sizeof(ar)/sizeof(ar[0]));
42 R r = m.count(4);
43 assert(r == 0);
44 r = m.count(5);
45 assert(r == 3);
46 r = m.count(6);
47 assert(r == 0);
48 r = m.count(7);
49 assert(r == 3);
50 r = m.count(8);
51 assert(r == 0);
52 r = m.count(9);
53 assert(r == 3);
54 r = m.count(10);
55 assert(r == 0);
56 }
57 }
58 #if __cplusplus >= 201103L
59 {
60 typedef std::multimap<int, double, std::less<int>, min_allocator<std::pair<const int, double>>> M;
61 {
62 typedef M::size_type R;
63 V ar[] =
64 {
65 V(5, 1),
66 V(5, 2),
67 V(5, 3),
68 V(7, 1),
69 V(7, 2),
70 V(7, 3),
71 V(9, 1),
72 V(9, 2),
73 V(9, 3)
74 };
75 const M m(ar, ar+sizeof(ar)/sizeof(ar[0]));
76 R r = m.count(4);
77 assert(r == 0);
78 r = m.count(5);
79 assert(r == 3);
80 r = m.count(6);
81 assert(r == 0);
82 r = m.count(7);
83 assert(r == 3);
84 r = m.count(8);
85 assert(r == 0);
86 r = m.count(9);
87 assert(r == 3);
88 r = m.count(10);
89 assert(r == 0);
90 }
91 }
92 #endif
93
94 #if _LIBCPP_STD_VER > 11
95 {
96 typedef std::multimap<int, double, std::less<>> M;
97 typedef M::size_type R;
98 V ar[] =
99 {
100 V(5, 1),
101 V(5, 2),
102 V(5, 3),
103 V(7, 1),
104 V(7, 2),
105 V(7, 3),
106 V(9, 1),
107 V(9, 2),
108 V(9, 3)
109 };
110 const M m(ar, ar+sizeof(ar)/sizeof(ar[0]));
111 R r = m.count(4);
112 assert(r == 0);
113 r = m.count(5);
114 assert(r == 3);
115 r = m.count(6);
116 assert(r == 0);
117 r = m.count(7);
118 assert(r == 3);
119 r = m.count(8);
120 assert(r == 0);
121 r = m.count(9);
122 assert(r == 3);
123 r = m.count(10);
124 assert(r == 0);
125 }
126
127 {
128 typedef PrivateConstructor PC;
129 typedef std::multimap<PC, double, std::less<>> M;
130 typedef M::size_type R;
131
132 M m;
133 m.insert ( std::make_pair<PC, double> ( PC::make(5), 1 ));
134 m.insert ( std::make_pair<PC, double> ( PC::make(5), 2 ));
135 m.insert ( std::make_pair<PC, double> ( PC::make(5), 3 ));
136 m.insert ( std::make_pair<PC, double> ( PC::make(7), 1 ));
137 m.insert ( std::make_pair<PC, double> ( PC::make(7), 2 ));
138 m.insert ( std::make_pair<PC, double> ( PC::make(7), 3 ));
139 m.insert ( std::make_pair<PC, double> ( PC::make(9), 1 ));
140 m.insert ( std::make_pair<PC, double> ( PC::make(9), 2 ));
141 m.insert ( std::make_pair<PC, double> ( PC::make(9), 3 ));
142
143 R r = m.count(4);
144 assert(r == 0);
145 r = m.count(5);
146 assert(r == 3);
147 r = m.count(6);
148 assert(r == 0);
149 r = m.count(7);
150 assert(r == 3);
151 r = m.count(8);
152 assert(r == 0);
153 r = m.count(9);
154 assert(r == 3);
155 r = m.count(10);
156 assert(r == 0);
157 }
158 #endif
159 }
160