iterator.pass.cpp revision 6046aced820aaab4f14f2026531dd11d10690691
1bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant//===----------------------------------------------------------------------===//
2bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant//
3f5256e16dfc425c1d466f6308d4026d529ce9e0bHoward Hinnant//                     The LLVM Compiler Infrastructure
4bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant//
5bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// This file is distributed under the University of Illinois Open Source
6bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// License. See LICENSE.TXT for details.
7bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant//
8bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant//===----------------------------------------------------------------------===//
9bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant
10bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// <set>
11bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant
12bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// class multiset
13bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant
14bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant//       iterator begin();
15bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// const_iterator begin() const;
16bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant//       iterator end();
17bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// const_iterator end()   const;
186046aced820aaab4f14f2026531dd11d10690691Howard Hinnant//
19bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant//       reverse_iterator rbegin();
20bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// const_reverse_iterator rbegin() const;
21bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant//       reverse_iterator rend();
22bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// const_reverse_iterator rend()   const;
236046aced820aaab4f14f2026531dd11d10690691Howard Hinnant//
24bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// const_iterator         cbegin()  const;
25bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// const_iterator         cend()    const;
26bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// const_reverse_iterator crbegin() const;
27bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// const_reverse_iterator crend()   const;
28bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant
29bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#include <set>
30bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#include <cassert>
31bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant
32bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantint main()
33bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{
34bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    {
35bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        typedef int V;
36bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        V ar[] =
37bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        {
38bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant            1,
39bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant            1,
40bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant            1,
41bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant            2,
42bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant            2,
43bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant            2,
44bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant            3,
45bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant            3,
46bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant            3,
47bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant            4,
48bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant            4,
49bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant            4,
50bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant            5,
51bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant            5,
52bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant            5,
53bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant            6,
54bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant            6,
55bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant            6,
56bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant            7,
57bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant            7,
58bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant            7,
59bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant            8,
60bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant            8,
61bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant            8
62bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        };
63bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        std::multiset<int> m(ar, ar+sizeof(ar)/sizeof(ar[0]));
64bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(std::distance(m.begin(), m.end()) == m.size());
65bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(std::distance(m.rbegin(), m.rend()) == m.size());
66bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        std::multiset<int>::iterator i = m.begin();
67bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        std::multiset<int>::const_iterator k = i;
68bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(i == k);
69bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        for (int j = 1; j <= 8; ++j)
70bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant            for (int k = 0; k < 3; ++k, ++i)
71bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant                assert(*i == j);
72bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    }
73bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    {
74bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        typedef int V;
75bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        V ar[] =
76bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        {
77bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant            1,
78bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant            1,
79bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant            1,
80bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant            2,
81bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant            2,
82bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant            2,
83bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant            3,
84bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant            3,
85bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant            3,
86bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant            4,
87bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant            4,
88bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant            4,
89bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant            5,
90bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant            5,
91bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant            5,
92bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant            6,
93bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant            6,
94bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant            6,
95bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant            7,
96bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant            7,
97bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant            7,
98bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant            8,
99bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant            8,
100bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant            8
101bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        };
102bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        const std::multiset<int> m(ar, ar+sizeof(ar)/sizeof(ar[0]));
103bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(std::distance(m.begin(), m.end()) == m.size());
104bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(std::distance(m.cbegin(), m.cend()) == m.size());
105bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(std::distance(m.rbegin(), m.rend()) == m.size());
106bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(std::distance(m.crbegin(), m.crend()) == m.size());
107bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        std::multiset<int, double>::const_iterator i = m.begin();
108bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        for (int j = 1; j <= 8; ++j)
109bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant            for (int k = 0; k < 3; ++k, ++i)
110bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant                assert(*i == j);
111bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    }
112bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant}
113