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
23int 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