]>
git.ipfire.org Git - thirdparty/gcc.git/blob - libstdc++-v3/testsuite/21_strings/basic_string_view/operators/wchar_t/cmp_c++20.cc
1 // { dg-options "-std=gnu++2a" }
2 // { dg-do run { target c++2a } }
4 // Copyright (C) 2020-2023 Free Software Foundation, Inc.
6 // This file is part of the GNU ISO C++ Library. This library is free
7 // software; you can redistribute it and/or modify it under the
8 // terms of the GNU General Public License as published by the
9 // Free Software Foundation; either version 3, or (at your option)
12 // This library is distributed in the hope that it will be useful,
13 // but WITHOUT ANY WARRANTY; without even the implied warranty of
14 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 // GNU General Public License for more details.
17 // You should have received a copy of the GNU General Public License along
18 // with this library; see the file COPYING3. If not see
19 // <http://www.gnu.org/licenses/>.
21 // C++20 21.4.4 Non-member comparison functions [string.view.comparisons]
25 template<class charT, class traits>
27 operator==(basic_string_view<charT, traits> lhs,
28 basic_string_view<charT, traits> rhs) noexcept;
30 template<class charT, class traits>
32 operator==(basic_string_view<charT, traits> lhs,
33 type_identity_t<basic_string_view<charT, traits>> rhs) noexcept;
38 template<class charT, class traits>
40 operator<=>(basic_string_view<charT, traits> lhs,
41 basic_string_view<charT, traits> rhs) noexcept;
43 template<class charT, class traits>
45 operator<=>(basic_string_view<charT, traits> lhs,
46 type_identity_t<basic_string_view<charT, traits>> rhs) noexcept;
49 #include <string_view>
50 #include <testsuite_hooks.h>
55 std::wstring_view
str_0(L
"costa rica");
56 std::wstring_view
str_1(L
"costa marbella");
57 std::wstring_view
str_2(L
"cost");
58 std::wstring_view
str_3(L
"costa ricans");
59 std::wstring_view str_4
;
62 //comparisons between string_view objects
63 VERIFY( !(str_0
== str_1
) );
64 VERIFY( !(str_0
== str_2
) );
65 VERIFY( !(str_0
== str_3
) );
66 VERIFY( !(str_1
== str_0
) );
67 VERIFY( !(str_2
== str_0
) );
68 VERIFY( !(str_3
== str_0
) );
69 VERIFY( str_4
== str_0
);
70 VERIFY( str_0
== str_4
);
72 VERIFY( str_0
!= str_1
);
73 VERIFY( str_0
!= str_2
);
74 VERIFY( str_0
!= str_3
);
75 VERIFY( str_1
!= str_0
);
76 VERIFY( str_2
!= str_0
);
77 VERIFY( str_3
!= str_0
);
78 VERIFY( !(str_0
!= str_4
) );
79 VERIFY( !(str_4
!= str_0
) );
81 VERIFY( str_0
> str_1
); //true cuz r>m
82 VERIFY( str_0
> str_2
);
83 VERIFY( !(str_0
> str_3
) );
84 VERIFY( !(str_1
> str_0
) ); //false cuz m<r
85 VERIFY( !(str_2
> str_0
) );
86 VERIFY( str_3
> str_0
);
87 VERIFY( !(str_0
> str_4
) );
88 VERIFY( !(str_4
> str_0
) );
90 VERIFY( !(str_0
< str_1
) ); //false cuz r>m
91 VERIFY( !(str_0
< str_2
) );
92 VERIFY( str_0
< str_3
);
93 VERIFY( str_1
< str_0
); //true cuz m<r
94 VERIFY( str_2
< str_0
);
95 VERIFY( !(str_3
< str_0
) );
96 VERIFY( !(str_0
< str_4
) );
97 VERIFY( !(str_4
< str_0
) );
99 VERIFY( str_0
>= str_1
); //true cuz r>m
100 VERIFY( str_0
>= str_2
);
101 VERIFY( !(str_0
>= str_3
) );
102 VERIFY( !(str_1
>= str_0
) );//false cuz m<r
103 VERIFY( !(str_2
>= str_0
) );
104 VERIFY( str_3
>= str_0
);
105 VERIFY( str_0
>= str_4
);
106 VERIFY( str_4
>= str_0
);
108 VERIFY( !(str_0
<= str_1
) );//false cuz r>m
109 VERIFY( !(str_0
<= str_2
) );
110 VERIFY( str_0
<= str_3
);
111 VERIFY( str_1
<= str_0
);//true cuz m<r
112 VERIFY( str_2
<= str_0
);
113 VERIFY( !(str_3
<= str_0
) );
114 VERIFY( str_0
<= str_4
);
115 VERIFY( str_4
<= str_0
);
117 VERIFY( std::is_gt(str_0
<=> str_1
) );
118 VERIFY( std::is_gt(str_0
<=> str_2
) );
119 VERIFY( std::is_lt(str_0
<=> str_3
) );
120 VERIFY( std::is_eq(str_0
<=> str_4
) );
121 VERIFY( std::is_lt(str_1
<=> str_0
) );
122 VERIFY( std::is_lt(str_2
<=> str_0
) );
123 VERIFY( std::is_gt(str_3
<=> str_0
) );
124 VERIFY( std::is_eq(str_4
<=> str_0
) );
126 //comparisons between string_view object and string_view literal
127 VERIFY( !(str_0
== L
"costa marbella") );
128 VERIFY( !(str_0
== L
"cost") );
129 VERIFY( !(str_0
== L
"costa ricans") );
130 VERIFY( !(L
"costa marbella" == str_0
) );
131 VERIFY( !(L
"cost" == str_0
) );
132 VERIFY( !(L
"costa ricans" == str_0
) );
133 VERIFY( L
"costa rica" == str_0
);
134 VERIFY( str_0
== L
"costa rica" );
136 VERIFY( str_0
!= L
"costa marbella" );
137 VERIFY( str_0
!= L
"cost" );
138 VERIFY( str_0
!= L
"costa ricans" );
139 VERIFY( L
"costa marbella" != str_0
);
140 VERIFY( L
"cost" != str_0
);
141 VERIFY( L
"costa ricans" != str_0
);
142 VERIFY( !(L
"costa rica" != str_0
) );
143 VERIFY( !(str_0
!= L
"costa rica") );
145 VERIFY( str_0
> L
"costa marbella" ); //true cuz r>m
146 VERIFY( str_0
> L
"cost" );
147 VERIFY( !(str_0
> L
"costa ricans") );
148 VERIFY( !(L
"costa marbella" > str_0
) );//false cuz m<r
149 VERIFY( !(L
"cost" > str_0
) );
150 VERIFY( L
"costa ricans" > str_0
);
151 VERIFY( !(L
"costa rica" > str_0
) );
152 VERIFY( !(str_0
> L
"costa rica") );
154 VERIFY( !(str_0
< L
"costa marbella") );//false cuz r>m
155 VERIFY( !(str_0
< L
"cost") );
156 VERIFY( str_0
< L
"costa ricans" );
157 VERIFY( L
"costa marbella" < str_0
);//true cuz m<r
158 VERIFY( L
"cost" < str_0
);
159 VERIFY( !(L
"costa ricans" < str_0
) );
160 VERIFY( !(L
"costa rica" < str_0
) );
161 VERIFY( !(str_0
< L
"costa rica") );
163 VERIFY( str_0
>= L
"costa marbella" );//true cuz r>m
164 VERIFY( str_0
>= L
"cost" );
165 VERIFY( !(str_0
>= L
"costa ricans") );
166 VERIFY( !(L
"costa marbella" >= str_0
) );//false cuz m<r
167 VERIFY( !(L
"cost" >= str_0
) );
168 VERIFY( L
"costa ricans" >= str_0
);
169 VERIFY( L
"costa rica" >= str_0
);
170 VERIFY( str_0
>= L
"costa rica" );
172 VERIFY( !(str_0
<= L
"costa marbella") );//false cuz r>m
173 VERIFY( !(str_0
<= L
"cost") );
174 VERIFY( str_0
<= L
"costa ricans" );
175 VERIFY( L
"costa marbella" <= str_0
);//true cuz m<r
176 VERIFY( L
"cost" <= str_0
);
177 VERIFY( !(L
"costa ricans" <= str_0
) );
178 VERIFY( L
"costa rica" <= str_0
);
179 VERIFY( str_0
<= L
"costa rica" );
181 VERIFY( std::is_gt(str_0
<=> L
"costa marbella") );
182 VERIFY( std::is_gt(str_0
<=> L
"cost") );
183 VERIFY( std::is_lt(str_0
<=> L
"costa ricans") );
184 VERIFY( std::is_eq(str_0
<=> L
"costa rica") );
185 VERIFY( std::is_lt(L
"costa marbella" <=> str_0
) );
186 VERIFY( std::is_lt(L
"cost" <=> str_0
) );
187 VERIFY( std::is_gt(L
"costa ricans" <=> str_0
) );
188 VERIFY( std::is_eq(L
"costa rica" <=> str_0
) );
194 std::wstring_view
str_0(L
"costa rica");
195 std::wstring_view
str_1(L
"costa marbella");
196 std::wstring_view
str_2(L
"cost");
197 std::wstring_view
str_3(L
"costa ricans");
198 std::wstring_view str_4
;
201 #define VERIFY(x) if (!(x)) return false
204 //comparisons between string_view objects
205 VERIFY( !(str_0
== str_1
) );
206 VERIFY( !(str_0
== str_2
) );
207 VERIFY( !(str_0
== str_3
) );
208 VERIFY( !(str_1
== str_0
) );
209 VERIFY( !(str_2
== str_0
) );
210 VERIFY( !(str_3
== str_0
) );
211 VERIFY( str_4
== str_0
);
212 VERIFY( str_0
== str_4
);
214 VERIFY( str_0
!= str_1
);
215 VERIFY( str_0
!= str_2
);
216 VERIFY( str_0
!= str_3
);
217 VERIFY( str_1
!= str_0
);
218 VERIFY( str_2
!= str_0
);
219 VERIFY( str_3
!= str_0
);
220 VERIFY( !(str_0
!= str_4
) );
221 VERIFY( !(str_4
!= str_0
) );
223 VERIFY( str_0
> str_1
); //true cuz r>m
224 VERIFY( str_0
> str_2
);
225 VERIFY( !(str_0
> str_3
) );
226 VERIFY( !(str_1
> str_0
) ); //false cuz m<r
227 VERIFY( !(str_2
> str_0
) );
228 VERIFY( str_3
> str_0
);
229 VERIFY( !(str_0
> str_4
) );
230 VERIFY( !(str_4
> str_0
) );
232 VERIFY( !(str_0
< str_1
) ); //false cuz r>m
233 VERIFY( !(str_0
< str_2
) );
234 VERIFY( str_0
< str_3
);
235 VERIFY( str_1
< str_0
); //true cuz m<r
236 VERIFY( str_2
< str_0
);
237 VERIFY( !(str_3
< str_0
) );
238 VERIFY( !(str_0
< str_4
) );
239 VERIFY( !(str_4
< str_0
) );
241 VERIFY( str_0
>= str_1
); //true cuz r>m
242 VERIFY( str_0
>= str_2
);
243 VERIFY( !(str_0
>= str_3
) );
244 VERIFY( !(str_1
>= str_0
) );//false cuz m<r
245 VERIFY( !(str_2
>= str_0
) );
246 VERIFY( str_3
>= str_0
);
247 VERIFY( str_0
>= str_4
);
248 VERIFY( str_4
>= str_0
);
250 VERIFY( !(str_0
<= str_1
) );//false cuz r>m
251 VERIFY( !(str_0
<= str_2
) );
252 VERIFY( str_0
<= str_3
);
253 VERIFY( str_1
<= str_0
);//true cuz m<r
254 VERIFY( str_2
<= str_0
);
255 VERIFY( !(str_3
<= str_0
) );
256 VERIFY( str_0
<= str_4
);
257 VERIFY( str_4
<= str_0
);
259 VERIFY( std::is_gt(str_0
<=> str_1
) );
260 VERIFY( std::is_gt(str_0
<=> str_2
) );
261 VERIFY( std::is_lt(str_0
<=> str_3
) );
262 VERIFY( std::is_eq(str_0
<=> str_4
) );
263 VERIFY( std::is_lt(str_1
<=> str_0
) );
264 VERIFY( std::is_lt(str_2
<=> str_0
) );
265 VERIFY( std::is_gt(str_3
<=> str_0
) );
266 VERIFY( std::is_eq(str_4
<=> str_0
) );
268 //comparisons between string_view object and string_view literal
269 VERIFY( !(str_0
== L
"costa marbella") );
270 VERIFY( !(str_0
== L
"cost") );
271 VERIFY( !(str_0
== L
"costa ricans") );
272 VERIFY( !(L
"costa marbella" == str_0
) );
273 VERIFY( !(L
"cost" == str_0
) );
274 VERIFY( !(L
"costa ricans" == str_0
) );
275 VERIFY( L
"costa rica" == str_0
);
276 VERIFY( str_0
== L
"costa rica" );
278 VERIFY( str_0
!= L
"costa marbella" );
279 VERIFY( str_0
!= L
"cost" );
280 VERIFY( str_0
!= L
"costa ricans" );
281 VERIFY( L
"costa marbella" != str_0
);
282 VERIFY( L
"cost" != str_0
);
283 VERIFY( L
"costa ricans" != str_0
);
284 VERIFY( !(L
"costa rica" != str_0
) );
285 VERIFY( !(str_0
!= L
"costa rica") );
287 VERIFY( str_0
> L
"costa marbella" ); //true cuz r>m
288 VERIFY( str_0
> L
"cost" );
289 VERIFY( !(str_0
> L
"costa ricans") );
290 VERIFY( !(L
"costa marbella" > str_0
) );//false cuz m<r
291 VERIFY( !(L
"cost" > str_0
) );
292 VERIFY( L
"costa ricans" > str_0
);
293 VERIFY( !(L
"costa rica" > str_0
) );
294 VERIFY( !(str_0
> L
"costa rica") );
296 VERIFY( !(str_0
< L
"costa marbella") );//false cuz r>m
297 VERIFY( !(str_0
< L
"cost") );
298 VERIFY( str_0
< L
"costa ricans" );
299 VERIFY( L
"costa marbella" < str_0
);//true cuz m<r
300 VERIFY( L
"cost" < str_0
);
301 VERIFY( !(L
"costa ricans" < str_0
) );
302 VERIFY( !(L
"costa rica" < str_0
) );
303 VERIFY( !(str_0
< L
"costa rica") );
305 VERIFY( str_0
>= L
"costa marbella" );//true cuz r>m
306 VERIFY( str_0
>= L
"cost" );
307 VERIFY( !(str_0
>= L
"costa ricans") );
308 VERIFY( !(L
"costa marbella" >= str_0
) );//false cuz m<r
309 VERIFY( !(L
"cost" >= str_0
) );
310 VERIFY( L
"costa ricans" >= str_0
);
311 VERIFY( L
"costa rica" >= str_0
);
312 VERIFY( str_0
>= L
"costa rica" );
314 VERIFY( !(str_0
<= L
"costa marbella") );//false cuz r>m
315 VERIFY( !(str_0
<= L
"cost") );
316 VERIFY( str_0
<= L
"costa ricans" );
317 VERIFY( L
"costa marbella" <= str_0
);//true cuz m<r
318 VERIFY( L
"cost" <= str_0
);
319 VERIFY( !(L
"costa ricans" <= str_0
) );
320 VERIFY( L
"costa rica" <= str_0
);
321 VERIFY( str_0
<= L
"costa rica" );
323 VERIFY( std::is_gt(str_0
<=> L
"costa marbella") );
324 VERIFY( std::is_gt(str_0
<=> L
"cost") );
325 VERIFY( std::is_lt(str_0
<=> L
"costa ricans") );
326 VERIFY( std::is_eq(str_0
<=> L
"costa rica") );
327 VERIFY( std::is_lt(L
"costa marbella" <=> str_0
) );
328 VERIFY( std::is_lt(L
"cost" <=> str_0
) );
329 VERIFY( std::is_gt(L
"costa ricans" <=> str_0
) );
330 VERIFY( std::is_eq(L
"costa rica" <=> str_0
) );
339 static_assert( test02() );