1 // Copyright (C) 2018-2020 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 } }
21 #include <testsuite_hooks.h>
22 #include <testsuite_iterators.h>
24 using __gnu_test::test_container
;
25 using __gnu_test::bidirectional_iterator_wrapper
;
27 template<typename C
> struct traits
: std::char_traits
<C
> { };
32 const std::basic_string
<char, traits
<char>> s0
, s1
= "1";
33 const std::ssub_match sm
, sm2
;
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 );
45 VERIFY( !(sm
!= sm2
) );
46 VERIFY( !(sm
< sm2
) );
47 VERIFY( !(sm
> sm2
) );
52 VERIFY( !(sm
!= s0
) );
59 VERIFY( !(s0
!= sm
) );
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() );
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
);
79 VERIFY( !(sm
== s1
) );
84 VERIFY( !(sm
>= s1
) );
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()) );
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
);
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]) );
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
);
118 const std::basic_string
<char, traits
<char>> s0
, s1
= "1";
120 const std::csub_match sm2
;
121 const char c
[] = "1";
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 );
135 VERIFY( !(sm
== sm2
) );
137 VERIFY( !(sm
< sm2
) );
139 VERIFY( !(sm
<= sm2
) );
142 VERIFY( !(sm2
== sm
) );
145 VERIFY( !(sm2
> sm
) );
147 VERIFY( !(sm2
>= sm
) );
149 VERIFY( !(sm
== s0
) );
151 VERIFY( !(sm
< s0
) );
153 VERIFY( !(sm
<= s0
) );
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() );
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
) );
171 VERIFY( !(s1
!= sm
) );
172 VERIFY( !(s1
< sm
) );
173 VERIFY( !(s1
> sm
) );
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() );
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
);
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] );
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
);
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
;
215 sm
.first
= tc
.begin();
216 sm
.second
= tc
.end();
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 );
227 VERIFY( !(sm
== sm2
) );
229 VERIFY( !(sm
< sm2
) );
231 VERIFY( !(sm
<= sm2
) );
234 VERIFY( !(sm2
== sm
) );
237 VERIFY( !(sm2
> sm
) );
239 VERIFY( !(sm2
>= sm
) );
241 VERIFY( !(sm
== s0
) );
243 VERIFY( !(sm
< s0
) );
245 VERIFY( !(sm
<= s0
) );
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() );
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
) );
263 VERIFY( !(s1
!= sm
) );
264 VERIFY( !(s1
< sm
) );
265 VERIFY( !(s1
> sm
) );
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() );
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
);
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] );
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
);