blob: 36376aa0563c3a03d870ee5159d0fb4352876216 [file] [log] [blame]
Howard Hinnantcd85b9e2010-06-29 18:37:43 +00001//===----------------------------------------------------------------------===//
2//
3// The LLVM Compiler Infrastructure
4//
Howard Hinnantb64f8b02010-11-16 22:09:02 +00005// This file is dual licensed under the MIT and the University of Illinois Open
6// Source Licenses. See LICENSE.TXT for details.
Howard Hinnantcd85b9e2010-06-29 18:37:43 +00007//
8//===----------------------------------------------------------------------===//
9
10// <regex>
11
12// template <class BidirectionalIterator> class sub_match;
13
14// template <class BiIter>
15// bool
16// operator==(const sub_match<BiIter>& lhs, const sub_match<BiIter>& rhs);
Howard Hinnantbbd80862010-08-22 00:45:01 +000017//
Howard Hinnantcd85b9e2010-06-29 18:37:43 +000018// template <class BiIter>
19// bool
20// operator!=(const sub_match<BiIter>& lhs, const sub_match<BiIter>& rhs);
Howard Hinnantbbd80862010-08-22 00:45:01 +000021//
Howard Hinnantcd85b9e2010-06-29 18:37:43 +000022// template <class BiIter>
23// bool
24// operator<(const sub_match<BiIter>& lhs, const sub_match<BiIter>& rhs);
Howard Hinnantbbd80862010-08-22 00:45:01 +000025//
Howard Hinnantcd85b9e2010-06-29 18:37:43 +000026// template <class BiIter>
27// bool
28// operator<=(const sub_match<BiIter>& lhs, const sub_match<BiIter>& rhs);
Howard Hinnantbbd80862010-08-22 00:45:01 +000029//
Howard Hinnantcd85b9e2010-06-29 18:37:43 +000030// template <class BiIter>
31// bool
32// operator>=(const sub_match<BiIter>& lhs, const sub_match<BiIter>& rhs);
Howard Hinnantbbd80862010-08-22 00:45:01 +000033//
Howard Hinnantcd85b9e2010-06-29 18:37:43 +000034// template <class BiIter>
35// bool
36// operator>(const sub_match<BiIter>& lhs, const sub_match<BiIter>& rhs);
Howard Hinnantbbd80862010-08-22 00:45:01 +000037//
Howard Hinnantcd85b9e2010-06-29 18:37:43 +000038// template <class BiIter, class ST, class SA>
39// bool
40// operator==(const basic_string<typename iterator_traits<BiIter>::value_type, ST, SA>& lhs,
41// const sub_match<BiIter>& rhs);
Howard Hinnantbbd80862010-08-22 00:45:01 +000042//
Howard Hinnantcd85b9e2010-06-29 18:37:43 +000043// template <class BiIter, class ST, class SA>
44// bool
45// operator!=(const basic_string<typename iterator_traits<BiIter>::value_type, ST, SA>& lhs,
46// const sub_match<BiIter>& rhs);
Howard Hinnantbbd80862010-08-22 00:45:01 +000047//
Howard Hinnantcd85b9e2010-06-29 18:37:43 +000048// template <class BiIter, class ST, class SA>
49// bool
50// operator<(const basic_string<typename iterator_traits<BiIter>::value_type, ST, SA>& lhs,
51// const sub_match<BiIter>& rhs);
Howard Hinnantbbd80862010-08-22 00:45:01 +000052//
Howard Hinnantcd85b9e2010-06-29 18:37:43 +000053// template <class BiIter, class ST, class SA>
54// bool
55// operator>(const basic_string<typename iterator_traits<BiIter>::value_type, ST, SA>& lhs,
56// const sub_match<BiIter>& rhs);
Howard Hinnantbbd80862010-08-22 00:45:01 +000057//
Howard Hinnantcd85b9e2010-06-29 18:37:43 +000058// template <class BiIter, class ST, class SA>
59// bool operator>=(const basic_string<typename iterator_traits<BiIter>::value_type, ST, SA>& lhs,
60// const sub_match<BiIter>& rhs);
Howard Hinnantbbd80862010-08-22 00:45:01 +000061//
Howard Hinnantcd85b9e2010-06-29 18:37:43 +000062// template <class BiIter, class ST, class SA>
63// bool
64// operator<=(const basic_string<typename iterator_traits<BiIter>::value_type, ST, SA>& lhs,
65// const sub_match<BiIter>& rhs);
Howard Hinnantbbd80862010-08-22 00:45:01 +000066//
Howard Hinnantcd85b9e2010-06-29 18:37:43 +000067// template <class BiIter, class ST, class SA>
68// bool
69// operator==(const sub_match<BiIter>& lhs,
70// const basic_string<typename iterator_traits<BiIter>::value_type, ST, SA>& rhs);
Howard Hinnantbbd80862010-08-22 00:45:01 +000071//
Howard Hinnantcd85b9e2010-06-29 18:37:43 +000072// template <class BiIter, class ST, class SA>
73// bool
74// operator!=(const sub_match<BiIter>& lhs,
75// const basic_string<typename iterator_traits<BiIter>::value_type, ST, SA>& rhs);
Howard Hinnantbbd80862010-08-22 00:45:01 +000076//
Howard Hinnantcd85b9e2010-06-29 18:37:43 +000077// template <class BiIter, class ST, class SA>
78// bool
79// operator<(const sub_match<BiIter>& lhs,
80// const basic_string<typename iterator_traits<BiIter>::value_type, ST, SA>& rhs);
Howard Hinnantbbd80862010-08-22 00:45:01 +000081//
Howard Hinnantcd85b9e2010-06-29 18:37:43 +000082// template <class BiIter, class ST, class SA>
83// bool operator>(const sub_match<BiIter>& lhs,
84// const basic_string<typename iterator_traits<BiIter>::value_type, ST, SA>& rhs);
Howard Hinnantbbd80862010-08-22 00:45:01 +000085//
Howard Hinnantcd85b9e2010-06-29 18:37:43 +000086// template <class BiIter, class ST, class SA>
87// bool
88// operator>=(const sub_match<BiIter>& lhs,
89// const basic_string<typename iterator_traits<BiIter>::value_type, ST, SA>& rhs);
Howard Hinnantbbd80862010-08-22 00:45:01 +000090//
Howard Hinnantcd85b9e2010-06-29 18:37:43 +000091// template <class BiIter, class ST, class SA>
92// bool
93// operator<=(const sub_match<BiIter>& lhs,
94// const basic_string<typename iterator_traits<BiIter>::value_type, ST, SA>& rhs);
Howard Hinnantbbd80862010-08-22 00:45:01 +000095//
Howard Hinnantcd85b9e2010-06-29 18:37:43 +000096// template <class BiIter>
97// bool
98// operator==(typename iterator_traits<BiIter>::value_type const* lhs,
99// const sub_match<BiIter>& rhs);
Howard Hinnantbbd80862010-08-22 00:45:01 +0000100//
Howard Hinnantcd85b9e2010-06-29 18:37:43 +0000101// template <class BiIter>
102// bool
103// operator!=(typename iterator_traits<BiIter>::value_type const* lhs,
104// const sub_match<BiIter>& rhs);
Howard Hinnantbbd80862010-08-22 00:45:01 +0000105//
Howard Hinnantcd85b9e2010-06-29 18:37:43 +0000106// template <class BiIter>
107// bool
108// operator<(typename iterator_traits<BiIter>::value_type const* lhs,
109// const sub_match<BiIter>& rhs);
Howard Hinnantbbd80862010-08-22 00:45:01 +0000110//
Howard Hinnantcd85b9e2010-06-29 18:37:43 +0000111// template <class BiIter>
112// bool
113// operator>(typename iterator_traits<BiIter>::value_type const* lhs,
114// const sub_match<BiIter>& rhs);
Howard Hinnantbbd80862010-08-22 00:45:01 +0000115//
Howard Hinnantcd85b9e2010-06-29 18:37:43 +0000116// template <class BiIter>
117// bool
118// operator>=(typename iterator_traits<BiIter>::value_type const* lhs,
119// const sub_match<BiIter>& rhs);
Howard Hinnantbbd80862010-08-22 00:45:01 +0000120//
Howard Hinnantcd85b9e2010-06-29 18:37:43 +0000121// template <class BiIter>
122// bool
123// operator<=(typename iterator_traits<BiIter>::value_type const* lhs,
124// const sub_match<BiIter>& rhs);
Howard Hinnantbbd80862010-08-22 00:45:01 +0000125//
Howard Hinnantcd85b9e2010-06-29 18:37:43 +0000126// template <class BiIter>
127// bool
128// operator==(const sub_match<BiIter>& lhs,
129// typename iterator_traits<BiIter>::value_type const* rhs);
Howard Hinnantbbd80862010-08-22 00:45:01 +0000130//
Howard Hinnantcd85b9e2010-06-29 18:37:43 +0000131// template <class BiIter>
132// bool
133// operator!=(const sub_match<BiIter>& lhs,
134// typename iterator_traits<BiIter>::value_type const* rhs);
Howard Hinnantbbd80862010-08-22 00:45:01 +0000135//
Howard Hinnantcd85b9e2010-06-29 18:37:43 +0000136// template <class BiIter>
137// bool
138// operator<(const sub_match<BiIter>& lhs,
139// typename iterator_traits<BiIter>::value_type const* rhs);
Howard Hinnantbbd80862010-08-22 00:45:01 +0000140//
Howard Hinnantcd85b9e2010-06-29 18:37:43 +0000141// template <class BiIter>
142// bool
143// operator>(const sub_match<BiIter>& lhs,
144// typename iterator_traits<BiIter>::value_type const* rhs);
Howard Hinnantbbd80862010-08-22 00:45:01 +0000145//
Howard Hinnantcd85b9e2010-06-29 18:37:43 +0000146// template <class BiIter>
147// bool
148// operator>=(const sub_match<BiIter>& lhs,
149// typename iterator_traits<BiIter>::value_type const* rhs);
Howard Hinnantbbd80862010-08-22 00:45:01 +0000150//
Howard Hinnantcd85b9e2010-06-29 18:37:43 +0000151// template <class BiIter>
152// bool
153// operator<=(const sub_match<BiIter>& lhs,
154// typename iterator_traits<BiIter>::value_type const* rhs);
Howard Hinnantbbd80862010-08-22 00:45:01 +0000155//
Howard Hinnantcd85b9e2010-06-29 18:37:43 +0000156// template <class BiIter>
157// bool
158// operator==(typename iterator_traits<BiIter>::value_type const& lhs,
159// const sub_match<BiIter>& rhs);
Howard Hinnantbbd80862010-08-22 00:45:01 +0000160//
Howard Hinnantcd85b9e2010-06-29 18:37:43 +0000161// template <class BiIter>
162// bool
163// operator!=(typename iterator_traits<BiIter>::value_type const& lhs,
164// const sub_match<BiIter>& rhs);
Howard Hinnantbbd80862010-08-22 00:45:01 +0000165//
Howard Hinnantcd85b9e2010-06-29 18:37:43 +0000166// template <class BiIter>
167// bool
168// operator<(typename iterator_traits<BiIter>::value_type const& lhs,
169// const sub_match<BiIter>& rhs);
Howard Hinnantbbd80862010-08-22 00:45:01 +0000170//
Howard Hinnantcd85b9e2010-06-29 18:37:43 +0000171// template <class BiIter>
172// bool
173// operator>(typename iterator_traits<BiIter>::value_type const& lhs,
174// const sub_match<BiIter>& rhs);
Howard Hinnantbbd80862010-08-22 00:45:01 +0000175//
Howard Hinnantcd85b9e2010-06-29 18:37:43 +0000176// template <class BiIter>
177// bool
178// operator>=(typename iterator_traits<BiIter>::value_type const& lhs,
179// const sub_match<BiIter>& rhs);
Howard Hinnantbbd80862010-08-22 00:45:01 +0000180//
Howard Hinnantcd85b9e2010-06-29 18:37:43 +0000181// template <class BiIter>
182// bool
183// operator<=(typename iterator_traits<BiIter>::value_type const& lhs,
184// const sub_match<BiIter>& rhs);
Howard Hinnantbbd80862010-08-22 00:45:01 +0000185//
Howard Hinnantcd85b9e2010-06-29 18:37:43 +0000186// template <class BiIter>
187// bool
188// operator==(const sub_match<BiIter>& lhs,
189// typename iterator_traits<BiIter>::value_type const& rhs);
Howard Hinnantbbd80862010-08-22 00:45:01 +0000190//
Howard Hinnantcd85b9e2010-06-29 18:37:43 +0000191// template <class BiIter>
192// bool
193// operator!=(const sub_match<BiIter>& lhs,
194// typename iterator_traits<BiIter>::value_type const& rhs);
Howard Hinnantbbd80862010-08-22 00:45:01 +0000195//
Howard Hinnantcd85b9e2010-06-29 18:37:43 +0000196// template <class BiIter>
197// bool
198// operator<(const sub_match<BiIter>& lhs,
199// typename iterator_traits<BiIter>::value_type const& rhs);
Howard Hinnantbbd80862010-08-22 00:45:01 +0000200//
Howard Hinnantcd85b9e2010-06-29 18:37:43 +0000201// template <class BiIter>
202// bool
203// operator>(const sub_match<BiIter>& lhs,
204// typename iterator_traits<BiIter>::value_type const& rhs);
Howard Hinnantbbd80862010-08-22 00:45:01 +0000205//
Howard Hinnantcd85b9e2010-06-29 18:37:43 +0000206// template <class BiIter>
207// bool
208// operator>=(const sub_match<BiIter>& lhs,
209// typename iterator_traits<BiIter>::value_type const& rhs);
Howard Hinnantbbd80862010-08-22 00:45:01 +0000210//
Howard Hinnantcd85b9e2010-06-29 18:37:43 +0000211// template <class BiIter>
212// bool
213// operator<=(const sub_match<BiIter>& lhs,
214// typename iterator_traits<BiIter>::value_type const& rhs);
215
216#include <regex>
217#include <cassert>
218
219template <class CharT>
220void
Marshall Clowe3e70542014-12-15 23:57:56 +0000221test(const std::basic_string<CharT>& x, const std::basic_string<CharT>& y, bool doCStrTests = true)
Howard Hinnantcd85b9e2010-06-29 18:37:43 +0000222{
223 typedef std::basic_string<CharT> string;
224 typedef std::sub_match<typename string::const_iterator> sub_match;
225 sub_match sm1;
226 sm1.first = x.begin();
227 sm1.second = x.end();
228 sm1.matched = true;
229 sub_match sm2;
230 sm2.first = y.begin();
231 sm2.second = y.end();
232 sm2.matched = true;
233 assert((sm1 == sm2) == (x == y));
234 assert((sm1 != sm2) == (x != y));
235 assert((sm1 < sm2) == (x < y));
236 assert((sm1 > sm2) == (x > y));
237 assert((sm1 <= sm2) == (x <= y));
238 assert((sm1 >= sm2) == (x >= y));
239 assert((x == sm2) == (x == y));
240 assert((x != sm2) == (x != y));
241 assert((x < sm2) == (x < y));
242 assert((x > sm2) == (x > y));
243 assert((x <= sm2) == (x <= y));
244 assert((x >= sm2) == (x >= y));
245 assert((sm1 == y) == (x == y));
246 assert((sm1 != y) == (x != y));
247 assert((sm1 < y) == (x < y));
248 assert((sm1 > y) == (x > y));
249 assert((sm1 <= y) == (x <= y));
250 assert((sm1 >= y) == (x >= y));
Marshall Clowe3e70542014-12-15 23:57:56 +0000251 if (doCStrTests) {
252 assert((x.c_str() == sm2) == (x == y));
253 assert((x.c_str() != sm2) == (x != y));
254 assert((x.c_str() < sm2) == (x < y));
255 assert((x.c_str() > sm2) == (x > y));
256 assert((x.c_str() <= sm2) == (x <= y));
257 assert((x.c_str() >= sm2) == (x >= y));
258 assert((sm1 == y.c_str()) == (x == y));
259 assert((sm1 != y.c_str()) == (x != y));
260 assert((sm1 < y.c_str()) == (x < y));
261 assert((sm1 > y.c_str()) == (x > y));
262 assert((sm1 <= y.c_str()) == (x <= y));
263 assert((sm1 >= y.c_str()) == (x >= y));
264 }
Howard Hinnantcd85b9e2010-06-29 18:37:43 +0000265 assert((x[0] == sm2) == (string(1, x[0]) == y));
266 assert((x[0] != sm2) == (string(1, x[0]) != y));
267 assert((x[0] < sm2) == (string(1, x[0]) < y));
268 assert((x[0] > sm2) == (string(1, x[0]) > y));
269 assert((x[0] <= sm2) == (string(1, x[0]) <= y));
270 assert((x[0] >= sm2) == (string(1, x[0]) >= y));
271 assert((sm1 == y[0]) == (x == string(1, y[0])));
272 assert((sm1 != y[0]) == (x != string(1, y[0])));
273 assert((sm1 < y[0]) == (x < string(1, y[0])));
274 assert((sm1 > y[0]) == (x > string(1, y[0])));
275 assert((sm1 <= y[0]) == (x <= string(1, y[0])));
276 assert((sm1 >= y[0]) == (x >= string(1, y[0])));
277}
278
279int main()
280{
281 test(std::string("123"), std::string("123"));
282 test(std::string("1234"), std::string("123"));
283 test(std::wstring(L"123"), std::wstring(L"123"));
284 test(std::wstring(L"1234"), std::wstring(L"123"));
Marshall Clow4975bad2014-12-16 16:22:43 +0000285 test(std::string("123\00056", 6), std::string("123\00056", 6), false);
286 test(std::wstring(L"123\00056", 6), std::wstring(L"123\00056", 6), false);
Howard Hinnantcd85b9e2010-06-29 18:37:43 +0000287}