1 // Copyright (C) 2018-2023 Free Software Foundation, Inc.
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)
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.
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/>.
18 // { dg-do run { target c++11 } }
19 // { dg-timeout-factor 2 }
22 #include <testsuite_hooks.h>
23 #include <testsuite_iterators.h>
25 using __gnu_test::test_container
;
26 using __gnu_test::bidirectional_iterator_wrapper
;
28 template<typename C
> struct traits
: std::char_traits
<C
> { };
33 const std::basic_string
<char, traits
<char>> s0
, s1
= "1";
34 const std::ssub_match sm
, sm2
;
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 );
46 VERIFY( !(sm
!= sm2
) );
47 VERIFY( !(sm
< sm2
) );
48 VERIFY( !(sm
> sm2
) );
53 VERIFY( !(sm
!= s0
) );
60 VERIFY( !(s0
!= sm
) );
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() );
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
);
80 VERIFY( !(sm
== s1
) );
85 VERIFY( !(sm
>= s1
) );
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()) );
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
);
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]) );
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
);
119 const std::basic_string
<char, traits
<char>> s0
, s1
= "1";
121 const std::csub_match sm2
;
122 const char c
[] = "1";
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 );
136 VERIFY( !(sm
== sm2
) );
138 VERIFY( !(sm
< sm2
) );
140 VERIFY( !(sm
<= sm2
) );
143 VERIFY( !(sm2
== sm
) );
146 VERIFY( !(sm2
> sm
) );
148 VERIFY( !(sm2
>= sm
) );
150 VERIFY( !(sm
== s0
) );
152 VERIFY( !(sm
< s0
) );
154 VERIFY( !(sm
<= s0
) );
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() );
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
) );
172 VERIFY( !(s1
!= sm
) );
173 VERIFY( !(s1
< sm
) );
174 VERIFY( !(s1
> sm
) );
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() );
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
);
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] );
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
);
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
;
216 sm
.first
= tc
.begin();
217 sm
.second
= tc
.end();
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 );
228 VERIFY( !(sm
== sm2
) );
230 VERIFY( !(sm
< sm2
) );
232 VERIFY( !(sm
<= sm2
) );
235 VERIFY( !(sm2
== sm
) );
238 VERIFY( !(sm2
> sm
) );
240 VERIFY( !(sm2
>= sm
) );
242 VERIFY( !(sm
== s0
) );
244 VERIFY( !(sm
< s0
) );
246 VERIFY( !(sm
<= s0
) );
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() );
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
) );
264 VERIFY( !(s1
!= sm
) );
265 VERIFY( !(s1
< sm
) );
266 VERIFY( !(s1
> sm
) );
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() );
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
);
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] );
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
);