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 // <map>
11
12 // class map
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 <map>
30 #include <cassert>
31
32 #include "min_allocator.h"
33
main()34 int main()
35 {
36 {
37 typedef std::pair<const int, double> V;
38 V ar[] =
39 {
40 V(1, 1),
41 V(1, 1.5),
42 V(1, 2),
43 V(2, 1),
44 V(2, 1.5),
45 V(2, 2),
46 V(3, 1),
47 V(3, 1.5),
48 V(3, 2),
49 V(4, 1),
50 V(4, 1.5),
51 V(4, 2),
52 V(5, 1),
53 V(5, 1.5),
54 V(5, 2),
55 V(6, 1),
56 V(6, 1.5),
57 V(6, 2),
58 V(7, 1),
59 V(7, 1.5),
60 V(7, 2),
61 V(8, 1),
62 V(8, 1.5),
63 V(8, 2)
64 };
65 std::map<int, double> m(ar, ar+sizeof(ar)/sizeof(ar[0]));
66 assert(std::distance(m.begin(), m.end()) == m.size());
67 assert(std::distance(m.rbegin(), m.rend()) == m.size());
68 std::map<int, double>::iterator i;
69 i = m.begin();
70 std::map<int, double>::const_iterator k = i;
71 assert(i == k);
72 for (int j = 1; j <= m.size(); ++j, ++i)
73 {
74 assert(i->first == j);
75 assert(i->second == 1);
76 i->second = 2.5;
77 assert(i->second == 2.5);
78 }
79 }
80 {
81 typedef std::pair<const int, double> V;
82 V ar[] =
83 {
84 V(1, 1),
85 V(1, 1.5),
86 V(1, 2),
87 V(2, 1),
88 V(2, 1.5),
89 V(2, 2),
90 V(3, 1),
91 V(3, 1.5),
92 V(3, 2),
93 V(4, 1),
94 V(4, 1.5),
95 V(4, 2),
96 V(5, 1),
97 V(5, 1.5),
98 V(5, 2),
99 V(6, 1),
100 V(6, 1.5),
101 V(6, 2),
102 V(7, 1),
103 V(7, 1.5),
104 V(7, 2),
105 V(8, 1),
106 V(8, 1.5),
107 V(8, 2)
108 };
109 const std::map<int, double> m(ar, ar+sizeof(ar)/sizeof(ar[0]));
110 assert(std::distance(m.begin(), m.end()) == m.size());
111 assert(std::distance(m.cbegin(), m.cend()) == m.size());
112 assert(std::distance(m.rbegin(), m.rend()) == m.size());
113 assert(std::distance(m.crbegin(), m.crend()) == m.size());
114 std::map<int, double>::const_iterator i;
115 i = m.begin();
116 for (int j = 1; j <= m.size(); ++j, ++i)
117 {
118 assert(i->first == j);
119 assert(i->second == 1);
120 }
121 }
122 #if __cplusplus >= 201103L
123 {
124 typedef std::pair<const int, double> V;
125 V ar[] =
126 {
127 V(1, 1),
128 V(1, 1.5),
129 V(1, 2),
130 V(2, 1),
131 V(2, 1.5),
132 V(2, 2),
133 V(3, 1),
134 V(3, 1.5),
135 V(3, 2),
136 V(4, 1),
137 V(4, 1.5),
138 V(4, 2),
139 V(5, 1),
140 V(5, 1.5),
141 V(5, 2),
142 V(6, 1),
143 V(6, 1.5),
144 V(6, 2),
145 V(7, 1),
146 V(7, 1.5),
147 V(7, 2),
148 V(8, 1),
149 V(8, 1.5),
150 V(8, 2)
151 };
152 std::map<int, double, std::less<int>, min_allocator<V>> m(ar, ar+sizeof(ar)/sizeof(ar[0]));
153 assert(std::distance(m.begin(), m.end()) == m.size());
154 assert(std::distance(m.rbegin(), m.rend()) == m.size());
155 std::map<int, double, std::less<int>, min_allocator<V>>::iterator i;
156 i = m.begin();
157 std::map<int, double, std::less<int>, min_allocator<V>>::const_iterator k = i;
158 assert(i == k);
159 for (int j = 1; j <= m.size(); ++j, ++i)
160 {
161 assert(i->first == j);
162 assert(i->second == 1);
163 i->second = 2.5;
164 assert(i->second == 2.5);
165 }
166 }
167 {
168 typedef std::pair<const int, double> V;
169 V ar[] =
170 {
171 V(1, 1),
172 V(1, 1.5),
173 V(1, 2),
174 V(2, 1),
175 V(2, 1.5),
176 V(2, 2),
177 V(3, 1),
178 V(3, 1.5),
179 V(3, 2),
180 V(4, 1),
181 V(4, 1.5),
182 V(4, 2),
183 V(5, 1),
184 V(5, 1.5),
185 V(5, 2),
186 V(6, 1),
187 V(6, 1.5),
188 V(6, 2),
189 V(7, 1),
190 V(7, 1.5),
191 V(7, 2),
192 V(8, 1),
193 V(8, 1.5),
194 V(8, 2)
195 };
196 const std::map<int, double, std::less<int>, min_allocator<V>> m(ar, ar+sizeof(ar)/sizeof(ar[0]));
197 assert(std::distance(m.begin(), m.end()) == m.size());
198 assert(std::distance(m.cbegin(), m.cend()) == m.size());
199 assert(std::distance(m.rbegin(), m.rend()) == m.size());
200 assert(std::distance(m.crbegin(), m.crend()) == m.size());
201 std::map<int, double, std::less<int>, min_allocator<V>>::const_iterator i;
202 i = m.begin();
203 for (int j = 1; j <= m.size(); ++j, ++i)
204 {
205 assert(i->first == j);
206 assert(i->second == 1);
207 }
208 }
209 #endif
210 #if _LIBCPP_STD_VER > 11
211 { // N3644 testing
212 typedef std::map<int, double> C;
213 C::iterator ii1{}, ii2{};
214 C::iterator ii4 = ii1;
215 C::const_iterator cii{};
216 assert ( ii1 == ii2 );
217 assert ( ii1 == ii4 );
218
219 assert (!(ii1 != ii2 ));
220
221 assert ( (ii1 == cii ));
222 assert ( (cii == ii1 ));
223 assert (!(ii1 != cii ));
224 assert (!(cii != ii1 ));
225 }
226 #endif
227 }
228