]> 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-2023 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 // { dg-timeout-factor 2 }
20
21 #include <regex>
22 #include <testsuite_hooks.h>
23 #include <testsuite_iterators.h>
24
25 using __gnu_test::test_container;
26 using __gnu_test::bidirectional_iterator_wrapper;
27
28 template<typename C> struct traits : std::char_traits<C> { };
29
30 void
31 test01()
32 {
33 const std::basic_string<char, traits<char>> s0, s1 = "1";
34 const std::ssub_match sm, sm2;
35
36 VERIFY( sm.compare(sm) == 0 );
37 VERIFY( sm.compare(sm2) == 0 );
38 VERIFY( sm.compare(sm.str()) == 0 );
39 VERIFY( sm.compare(sm.str().c_str()) == 0 );
40 VERIFY( sm.compare(sm2.str()) == 0 );
41 VERIFY( sm.compare(sm2.str().c_str()) == 0 );
42 VERIFY( sm.compare(std::string(s1.c_str())) == -1 );
43 VERIFY( sm.compare(s1.c_str()) == -1 );
44
45 VERIFY( sm == sm2 );
46 VERIFY( !(sm != sm2) );
47 VERIFY( !(sm < sm2) );
48 VERIFY( !(sm > sm2) );
49 VERIFY( sm <= sm2 );
50 VERIFY( sm >= sm2 );
51
52 VERIFY( sm == s0 );
53 VERIFY( !(sm != s0) );
54 VERIFY( !(sm < s0) );
55 VERIFY( !(sm > s0) );
56 VERIFY( sm <= s0 );
57 VERIFY( sm >= s0 );
58
59 VERIFY( s0 == sm );
60 VERIFY( !(s0 != sm) );
61 VERIFY( !(s0 < sm) );
62 VERIFY( !(s0 > sm) );
63 VERIFY( s0 <= sm );
64 VERIFY( s0 >= sm );
65
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 VERIFY( sm >= s0.c_str() );
72
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 VERIFY( s0.c_str() >= sm );
79
80 VERIFY( !(sm == s1) );
81 VERIFY( sm != s1 );
82 VERIFY( sm < s1 );
83 VERIFY( !(sm > s1) );
84 VERIFY( sm <= s1 );
85 VERIFY( !(sm >= s1) );
86
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 VERIFY( !(sm >= s1.c_str()) );
93
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 VERIFY( s1.c_str() >= sm );
100
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 VERIFY( !(sm >= s1[0]) );
107
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 VERIFY( s1[0] >= sm );
114 }
115
116 void
117 test02()
118 {
119 const std::basic_string<char, traits<char>> s0, s1 = "1";
120 std::csub_match sm;
121 const std::csub_match sm2;
122 const char c[] = "1";
123 sm.matched = true;
124 sm.first = c;
125 sm.second = c+1;
126
127 VERIFY( sm.compare(sm) == 0 );
128 VERIFY( sm.compare(sm2) == 1 );
129 VERIFY( sm.compare(sm.str()) == 0 );
130 VERIFY( sm.compare(sm.str().c_str()) == 0 );
131 VERIFY( sm.compare(sm2.str()) == 1 );
132 VERIFY( sm.compare(sm2.str().c_str()) == 1 );
133 VERIFY( sm.compare(std::string(s1.c_str())) == 0 );
134 VERIFY( sm.compare(s1.c_str()) == 0 );
135
136 VERIFY( !(sm == sm2) );
137 VERIFY( sm != sm2 );
138 VERIFY( !(sm < sm2) );
139 VERIFY( sm > sm2 );
140 VERIFY( !(sm <= sm2) );
141 VERIFY( sm >= sm2 );
142
143 VERIFY( !(sm2 == sm) );
144 VERIFY( sm2 != sm );
145 VERIFY( sm2 < sm );
146 VERIFY( !(sm2 > sm) );
147 VERIFY( sm2 <= sm );
148 VERIFY( !(sm2 >= sm) );
149
150 VERIFY( !(sm == s0) );
151 VERIFY( sm != s0 );
152 VERIFY( !(sm < s0) );
153 VERIFY( sm > s0 );
154 VERIFY( !(sm <= s0) );
155 VERIFY( sm >= s0 );
156
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 VERIFY( sm >= s0.c_str() );
163
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 VERIFY( !(s0.c_str() >= sm) );
170
171 VERIFY( s1 == sm );
172 VERIFY( !(s1 != sm) );
173 VERIFY( !(s1 < sm) );
174 VERIFY( !(s1 > sm) );
175 VERIFY( s1 <= sm );
176 VERIFY( s1 >= sm );
177
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 VERIFY( sm >= s1.c_str() );
184
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 VERIFY( s1.c_str() >= sm );
191
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 VERIFY( sm >= s1[0] );
198
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 VERIFY( s1[0] >= sm );
205 }
206
207 void
208 test03()
209 {
210 const std::basic_string<char, traits<char>> s0, s1 = "1";
211 const char c[] = "1";
212 test_container<const char, bidirectional_iterator_wrapper> tc(c, c+1);
213 std::sub_match<bidirectional_iterator_wrapper<const char>> sm;
214 const std::sub_match<bidirectional_iterator_wrapper<const char>> sm2;
215 sm.matched = true;
216 sm.first = tc.begin();
217 sm.second = tc.end();
218
219 VERIFY( sm.compare(sm) == 0 );
220 VERIFY( sm.compare(sm2) == 1 );
221 VERIFY( sm.compare(sm.str()) == 0 );
222 VERIFY( sm.compare(sm.str().c_str()) == 0 );
223 VERIFY( sm.compare(sm2.str()) == 1 );
224 VERIFY( sm.compare(sm2.str().c_str()) == 1 );
225 VERIFY( sm.compare(std::string(s1.c_str())) == 0 );
226 VERIFY( sm.compare(s1.c_str()) == 0 );
227
228 VERIFY( !(sm == sm2) );
229 VERIFY( sm != sm2 );
230 VERIFY( !(sm < sm2) );
231 VERIFY( sm > sm2 );
232 VERIFY( !(sm <= sm2) );
233 VERIFY( sm >= sm2 );
234
235 VERIFY( !(sm2 == sm) );
236 VERIFY( sm2 != sm );
237 VERIFY( sm2 < sm );
238 VERIFY( !(sm2 > sm) );
239 VERIFY( sm2 <= sm );
240 VERIFY( !(sm2 >= sm) );
241
242 VERIFY( !(sm == s0) );
243 VERIFY( sm != s0 );
244 VERIFY( !(sm < s0) );
245 VERIFY( sm > s0 );
246 VERIFY( !(sm <= s0) );
247 VERIFY( sm >= s0 );
248
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 VERIFY( sm >= s0.c_str() );
255
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 VERIFY( !(s0.c_str() >= sm) );
262
263 VERIFY( s1 == sm );
264 VERIFY( !(s1 != sm) );
265 VERIFY( !(s1 < sm) );
266 VERIFY( !(s1 > sm) );
267 VERIFY( s1 <= sm );
268 VERIFY( s1 >= sm );
269
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 VERIFY( sm >= s1.c_str() );
276
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 VERIFY( s1.c_str() >= sm );
283
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 VERIFY( sm >= s1[0] );
290
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 VERIFY( s1[0] >= sm );
297 }
298
299 int main()
300 {
301 test01();
302 test02();
303 test03();
304 }