]> git.ipfire.org Git - thirdparty/gcc.git/blob - libstdc++-v3/testsuite/28_regex/sub_match/compare.cc
Update copyright years.
[thirdparty/gcc.git] / libstdc++-v3 / testsuite / 28_regex / sub_match / compare.cc
1 // Copyright (C) 2018-2020 Free Software Foundation, Inc.
2 //
3 // This file is part of the GNU ISO C++ Library. This library is free
4 // software; you can redistribute it and/or modify it under the
5 // terms of the GNU General Public License as published by the
6 // Free Software Foundation; either version 3, or (at your option)
7 // any later version.
8
9 // This library is distributed in the hope that it will be useful,
10 // but WITHOUT ANY WARRANTY; without even the implied warranty of
11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 // GNU General Public License for more details.
13
14 // You should have received a copy of the GNU General Public License along
15 // with this library; see the file COPYING3. If not see
16 // <http://www.gnu.org/licenses/>.
17
18 // { dg-do run { target c++11 } }
19
20 #include <regex>
21 #include <testsuite_hooks.h>
22 #include <testsuite_iterators.h>
23
24 using __gnu_test::test_container;
25 using __gnu_test::bidirectional_iterator_wrapper;
26
27 template<typename C> struct traits : std::char_traits<C> { };
28
29 void
30 test01()
31 {
32 const std::basic_string<char, traits<char>> s0, s1 = "1";
33 const std::ssub_match sm, sm2;
34
35 VERIFY( sm.compare(sm) == 0 );
36 VERIFY( sm.compare(sm2) == 0 );
37 VERIFY( sm.compare(sm.str()) == 0 );
38 VERIFY( sm.compare(sm.str().c_str()) == 0 );
39 VERIFY( sm.compare(sm2.str()) == 0 );
40 VERIFY( sm.compare(sm2.str().c_str()) == 0 );
41 VERIFY( sm.compare(std::string(s1.c_str())) == -1 );
42 VERIFY( sm.compare(s1.c_str()) == -1 );
43
44 VERIFY( sm == sm2 );
45 VERIFY( !(sm != sm2) );
46 VERIFY( !(sm < sm2) );
47 VERIFY( !(sm > sm2) );
48 VERIFY( sm <= sm2 );
49 VERIFY( sm >= sm2 );
50
51 VERIFY( sm == s0 );
52 VERIFY( !(sm != s0) );
53 VERIFY( !(sm < s0) );
54 VERIFY( !(sm > s0) );
55 VERIFY( sm <= s0 );
56 VERIFY( sm >= s0 );
57
58 VERIFY( s0 == sm );
59 VERIFY( !(s0 != sm) );
60 VERIFY( !(s0 < sm) );
61 VERIFY( !(s0 > sm) );
62 VERIFY( s0 <= sm );
63 VERIFY( s0 >= sm );
64
65 VERIFY( sm == s0.c_str() );
66 VERIFY( !(sm != s0.c_str()) );
67 VERIFY( !(sm < s0.c_str()) );
68 VERIFY( !(sm > s0.c_str()) );
69 VERIFY( sm <= s0.c_str() );
70 VERIFY( sm >= s0.c_str() );
71
72 VERIFY( s0.c_str() == sm );
73 VERIFY( !(s0.c_str() != sm) );
74 VERIFY( !(s0.c_str() < sm) );
75 VERIFY( !(s0.c_str() > sm) );
76 VERIFY( s0.c_str() <= sm );
77 VERIFY( s0.c_str() >= sm );
78
79 VERIFY( !(sm == s1) );
80 VERIFY( sm != s1 );
81 VERIFY( sm < s1 );
82 VERIFY( !(sm > s1) );
83 VERIFY( sm <= s1 );
84 VERIFY( !(sm >= s1) );
85
86 VERIFY( !(sm == s1.c_str()) );
87 VERIFY( sm != s1.c_str() );
88 VERIFY( sm < s1.c_str() );
89 VERIFY( !(sm > s1.c_str()) );
90 VERIFY( sm <= s1.c_str() );
91 VERIFY( !(sm >= s1.c_str()) );
92
93 VERIFY( !(s1.c_str() == sm) );
94 VERIFY( s1.c_str() != sm );
95 VERIFY( !(s1.c_str() < sm) );
96 VERIFY( s1.c_str() > sm );
97 VERIFY( !(s1.c_str() <= sm) );
98 VERIFY( s1.c_str() >= sm );
99
100 VERIFY( !(sm == s1[0]) );
101 VERIFY( sm != s1[0] );
102 VERIFY( sm < s1[0] );
103 VERIFY( !(sm > s1[0]) );
104 VERIFY( sm <= s1[0] );
105 VERIFY( !(sm >= s1[0]) );
106
107 VERIFY( !(s1[0] == sm) );
108 VERIFY( s1[0] != sm );
109 VERIFY( !(s1[0] < sm) );
110 VERIFY( s1[0] > sm );
111 VERIFY( !(s1[0] <= sm) );
112 VERIFY( s1[0] >= sm );
113 }
114
115 void
116 test02()
117 {
118 const std::basic_string<char, traits<char>> s0, s1 = "1";
119 std::csub_match sm;
120 const std::csub_match sm2;
121 const char c[] = "1";
122 sm.matched = true;
123 sm.first = c;
124 sm.second = c+1;
125
126 VERIFY( sm.compare(sm) == 0 );
127 VERIFY( sm.compare(sm2) == 1 );
128 VERIFY( sm.compare(sm.str()) == 0 );
129 VERIFY( sm.compare(sm.str().c_str()) == 0 );
130 VERIFY( sm.compare(sm2.str()) == 1 );
131 VERIFY( sm.compare(sm2.str().c_str()) == 1 );
132 VERIFY( sm.compare(std::string(s1.c_str())) == 0 );
133 VERIFY( sm.compare(s1.c_str()) == 0 );
134
135 VERIFY( !(sm == sm2) );
136 VERIFY( sm != sm2 );
137 VERIFY( !(sm < sm2) );
138 VERIFY( sm > sm2 );
139 VERIFY( !(sm <= sm2) );
140 VERIFY( sm >= sm2 );
141
142 VERIFY( !(sm2 == sm) );
143 VERIFY( sm2 != sm );
144 VERIFY( sm2 < sm );
145 VERIFY( !(sm2 > sm) );
146 VERIFY( sm2 <= sm );
147 VERIFY( !(sm2 >= sm) );
148
149 VERIFY( !(sm == s0) );
150 VERIFY( sm != s0 );
151 VERIFY( !(sm < s0) );
152 VERIFY( sm > s0 );
153 VERIFY( !(sm <= s0) );
154 VERIFY( sm >= s0 );
155
156 VERIFY( !(sm == s0.c_str()) );
157 VERIFY( sm != s0.c_str() );
158 VERIFY( !(sm < s0.c_str()) );
159 VERIFY( sm > s0.c_str() );
160 VERIFY( !(sm <= s0.c_str()) );
161 VERIFY( sm >= s0.c_str() );
162
163 VERIFY( !(s0.c_str() == sm) );
164 VERIFY( s0.c_str() != sm );
165 VERIFY( s0.c_str() < sm );
166 VERIFY( !(s0.c_str() > sm) );
167 VERIFY( s0.c_str() <= sm );
168 VERIFY( !(s0.c_str() >= sm) );
169
170 VERIFY( s1 == sm );
171 VERIFY( !(s1 != sm) );
172 VERIFY( !(s1 < sm) );
173 VERIFY( !(s1 > sm) );
174 VERIFY( s1 <= sm );
175 VERIFY( s1 >= sm );
176
177 VERIFY( sm == s1.c_str() );
178 VERIFY( !(sm != s1.c_str()) );
179 VERIFY( !(sm < s1.c_str()) );
180 VERIFY( !(sm > s1.c_str()) );
181 VERIFY( sm <= s1.c_str() );
182 VERIFY( sm >= s1.c_str() );
183
184 VERIFY( s1.c_str() == sm );
185 VERIFY( !(s1.c_str() != sm) );
186 VERIFY( !(s1.c_str() < sm) );
187 VERIFY( !(s1.c_str() > sm) );
188 VERIFY( s1.c_str() <= sm );
189 VERIFY( s1.c_str() >= sm );
190
191 VERIFY( sm == s1[0] );
192 VERIFY( !(sm != s1[0]) );
193 VERIFY( !(sm < s1[0]) );
194 VERIFY( !(sm > s1[0]) );
195 VERIFY( sm <= s1[0] );
196 VERIFY( sm >= s1[0] );
197
198 VERIFY( s1[0] == sm );
199 VERIFY( !(s1[0] != sm) );
200 VERIFY( !(s1[0] < sm) );
201 VERIFY( !(s1[0] > sm) );
202 VERIFY( s1[0] <= sm );
203 VERIFY( s1[0] >= sm );
204 }
205
206 void
207 test03()
208 {
209 const std::basic_string<char, traits<char>> s0, s1 = "1";
210 const char c[] = "1";
211 test_container<const char, bidirectional_iterator_wrapper> tc(c, c+1);
212 std::sub_match<bidirectional_iterator_wrapper<const char>> sm;
213 const std::sub_match<bidirectional_iterator_wrapper<const char>> sm2;
214 sm.matched = true;
215 sm.first = tc.begin();
216 sm.second = tc.end();
217
218 VERIFY( sm.compare(sm) == 0 );
219 VERIFY( sm.compare(sm2) == 1 );
220 VERIFY( sm.compare(sm.str()) == 0 );
221 VERIFY( sm.compare(sm.str().c_str()) == 0 );
222 VERIFY( sm.compare(sm2.str()) == 1 );
223 VERIFY( sm.compare(sm2.str().c_str()) == 1 );
224 VERIFY( sm.compare(std::string(s1.c_str())) == 0 );
225 VERIFY( sm.compare(s1.c_str()) == 0 );
226
227 VERIFY( !(sm == sm2) );
228 VERIFY( sm != sm2 );
229 VERIFY( !(sm < sm2) );
230 VERIFY( sm > sm2 );
231 VERIFY( !(sm <= sm2) );
232 VERIFY( sm >= sm2 );
233
234 VERIFY( !(sm2 == sm) );
235 VERIFY( sm2 != sm );
236 VERIFY( sm2 < sm );
237 VERIFY( !(sm2 > sm) );
238 VERIFY( sm2 <= sm );
239 VERIFY( !(sm2 >= sm) );
240
241 VERIFY( !(sm == s0) );
242 VERIFY( sm != s0 );
243 VERIFY( !(sm < s0) );
244 VERIFY( sm > s0 );
245 VERIFY( !(sm <= s0) );
246 VERIFY( sm >= s0 );
247
248 VERIFY( !(sm == s0.c_str()) );
249 VERIFY( sm != s0.c_str() );
250 VERIFY( !(sm < s0.c_str()) );
251 VERIFY( sm > s0.c_str() );
252 VERIFY( !(sm <= s0.c_str()) );
253 VERIFY( sm >= s0.c_str() );
254
255 VERIFY( !(s0.c_str() == sm) );
256 VERIFY( s0.c_str() != sm );
257 VERIFY( s0.c_str() < sm );
258 VERIFY( !(s0.c_str() > sm) );
259 VERIFY( s0.c_str() <= sm );
260 VERIFY( !(s0.c_str() >= sm) );
261
262 VERIFY( s1 == sm );
263 VERIFY( !(s1 != sm) );
264 VERIFY( !(s1 < sm) );
265 VERIFY( !(s1 > sm) );
266 VERIFY( s1 <= sm );
267 VERIFY( s1 >= sm );
268
269 VERIFY( sm == s1.c_str() );
270 VERIFY( !(sm != s1.c_str()) );
271 VERIFY( !(sm < s1.c_str()) );
272 VERIFY( !(sm > s1.c_str()) );
273 VERIFY( sm <= s1.c_str() );
274 VERIFY( sm >= s1.c_str() );
275
276 VERIFY( s1.c_str() == sm );
277 VERIFY( !(s1.c_str() != sm) );
278 VERIFY( !(s1.c_str() < sm) );
279 VERIFY( !(s1.c_str() > sm) );
280 VERIFY( s1.c_str() <= sm );
281 VERIFY( s1.c_str() >= sm );
282
283 VERIFY( sm == s1[0] );
284 VERIFY( !(sm != s1[0]) );
285 VERIFY( !(sm < s1[0]) );
286 VERIFY( !(sm > s1[0]) );
287 VERIFY( sm <= s1[0] );
288 VERIFY( sm >= s1[0] );
289
290 VERIFY( s1[0] == sm );
291 VERIFY( !(s1[0] != sm) );
292 VERIFY( !(s1[0] < sm) );
293 VERIFY( !(s1[0] > sm) );
294 VERIFY( s1[0] <= sm );
295 VERIFY( s1[0] >= sm );
296 }
297
298 int main()
299 {
300 test01();
301 test02();
302 test03();
303 }