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// template <class InputIterator>
15//     multiset(InputIterator first, InputIterator last);
16
17#include <set>
18#include <cassert>
19
20#include "test_iterators.h"
21#include "min_allocator.h"
22
23int main()
24{
25    {
26    typedef int V;
27    V ar[] =
28    {
29        1,
30        1,
31        1,
32        2,
33        2,
34        2,
35        3,
36        3,
37        3
38    };
39    std::multiset<V> m(input_iterator<const int*>(ar),
40                  input_iterator<const int*>(ar+sizeof(ar)/sizeof(ar[0])));
41    assert(m.size() == 9);
42    assert(distance(m.begin(), m.end()) == 9);
43    assert(*next(m.begin(), 0) == 1);
44    assert(*next(m.begin(), 1) == 1);
45    assert(*next(m.begin(), 2) == 1);
46    assert(*next(m.begin(), 3) == 2);
47    assert(*next(m.begin(), 4) == 2);
48    assert(*next(m.begin(), 5) == 2);
49    assert(*next(m.begin(), 6) == 3);
50    assert(*next(m.begin(), 7) == 3);
51    assert(*next(m.begin(), 8) == 3);
52    }
53#if __cplusplus >= 201103L
54    {
55    typedef int V;
56    V ar[] =
57    {
58        1,
59        1,
60        1,
61        2,
62        2,
63        2,
64        3,
65        3,
66        3
67    };
68    std::multiset<V, std::less<V>, min_allocator<V>> m(input_iterator<const int*>(ar),
69                  input_iterator<const int*>(ar+sizeof(ar)/sizeof(ar[0])));
70    assert(m.size() == 9);
71    assert(distance(m.begin(), m.end()) == 9);
72    assert(*next(m.begin(), 0) == 1);
73    assert(*next(m.begin(), 1) == 1);
74    assert(*next(m.begin(), 2) == 1);
75    assert(*next(m.begin(), 3) == 2);
76    assert(*next(m.begin(), 4) == 2);
77    assert(*next(m.begin(), 5) == 2);
78    assert(*next(m.begin(), 6) == 3);
79    assert(*next(m.begin(), 7) == 3);
80    assert(*next(m.begin(), 8) == 3);
81    }
82#endif
83}
84