iterator.pass.cpp revision 211f0ee1be4a4eaa0fab353904a8986af3f39e50
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//       iterator begin();
15// const_iterator begin() const;
16//       iterator end();
17// const_iterator end()   const;
18//
19//       reverse_iterator rbegin();
20// const_reverse_iterator rbegin() const;
21//       reverse_iterator rend();
22// const_reverse_iterator rend()   const;
23//
24// const_iterator         cbegin()  const;
25// const_iterator         cend()    const;
26// const_reverse_iterator crbegin() const;
27// const_reverse_iterator crend()   const;
28
29#include <set>
30#include <cassert>
31
32int main()
33{
34    {
35        typedef int V;
36        V ar[] =
37        {
38            1,
39            1,
40            1,
41            2,
42            2,
43            2,
44            3,
45            3,
46            3,
47            4,
48            4,
49            4,
50            5,
51            5,
52            5,
53            6,
54            6,
55            6,
56            7,
57            7,
58            7,
59            8,
60            8,
61            8
62        };
63        std::multiset<int> m(ar, ar+sizeof(ar)/sizeof(ar[0]));
64        assert(std::distance(m.begin(), m.end()) == m.size());
65        assert(std::distance(m.rbegin(), m.rend()) == m.size());
66        std::multiset<int>::iterator i;
67        i = m.begin();
68        std::multiset<int>::const_iterator k = i;
69        assert(i == k);
70        for (int j = 1; j <= 8; ++j)
71            for (int k = 0; k < 3; ++k, ++i)
72                assert(*i == j);
73    }
74    {
75        typedef int V;
76        V ar[] =
77        {
78            1,
79            1,
80            1,
81            2,
82            2,
83            2,
84            3,
85            3,
86            3,
87            4,
88            4,
89            4,
90            5,
91            5,
92            5,
93            6,
94            6,
95            6,
96            7,
97            7,
98            7,
99            8,
100            8,
101            8
102        };
103        const std::multiset<int> m(ar, ar+sizeof(ar)/sizeof(ar[0]));
104        assert(std::distance(m.begin(), m.end()) == m.size());
105        assert(std::distance(m.cbegin(), m.cend()) == m.size());
106        assert(std::distance(m.rbegin(), m.rend()) == m.size());
107        assert(std::distance(m.crbegin(), m.crend()) == m.size());
108        std::multiset<int, double>::const_iterator i;
109        i = m.begin();
110        for (int j = 1; j <= 8; ++j)
111            for (int k = 0; k < 3; ++k, ++i)
112                assert(*i == j);
113    }
114}
115