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