1// { dg-options "-std=gnu++17" } 2 3// Copyright (C) 2013-2020 Free Software Foundation, Inc. 4// 5// This file is part of the GNU ISO C++ Library. This library is free 6// software; you can redistribute it and/or modify it under the 7// terms of the GNU General Public License as published by the 8// Free Software Foundation; either version 3, or (at your option) 9// any later version. 10 11// This library is distributed in the hope that it will be useful, 12// but WITHOUT ANY WARRANTY; without even the implied warranty of 13// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14// GNU General Public License for more details. 15 16// You should have received a copy of the GNU General Public License along 17// with this library; see the file COPYING3. If not see 18// <http://www.gnu.org/licenses/>. 19 20// basic_string_view non-member functions 21 22// operator== 23/* 24template<class charT, class traits, class Allocator> 25 bool operator==(const basic_string_view<charT,traits,Allocator>& lhs, 26 const basic_string_view<charT,traits,Allocator>& rhs); 27 28template<class charT, class traits, class Allocator> 29 bool operator==(const charT* lhs, 30 const basic_string_view<charT,traits,Allocator>& rhs); 31 32template<class charT, class traits, class Allocator> 33 bool operator==(const basic_string_view<charT,traits,Allocator>& lhs, 34 const charT* rhs); 35*/ 36 37// operator!= 38/* 39template<class charT, class traits, class Allocator> 40 bool operator!=(const basic_string_view<charT,traits,Allocator>& lhs, 41 const basic_string_view<charT,traits,Allocator>& rhs); 42 43template<class charT, class traits, class Allocator> 44 bool operator!=(const charT* lhs, 45 const basic_string_view<charT,traits,Allocator>& rhs); 46 47template<class charT, class traits, class Allocator> 48 bool operator!=(const basic_string_view<charT,traits,Allocator>& lhs, 49 const charT* rhs); 50*/ 51 52// operator< 53/* 54template<class charT, class traits, class Allocator> 55 bool operator< (const basic_string_view<charT,traits,Allocator>& lhs, 56 const basic_string_view<charT,traits,Allocator>& rhs); 57 58template<class charT, class traits, class Allocator> 59 bool operator< (const basic_string_view<charT,traits,Allocator>& lhs, 60 const charT* rhs); 61 62template<class charT, class traits, class Allocator> 63 bool operator< (const charT* lhs, 64 const basic_string_view<charT,traits,Allocator>& rhs); 65*/ 66 67// operator> 68/* 69template<class charT, class traits, class Allocator> 70 bool operator> (const basic_string_view<charT,traits,Allocator>& lhs, 71 const basic_string_view<charT,traits,Allocator>& rhs); 72 73template<class charT, class traits, class Allocator> 74 bool operator> (const basic_string_view<charT,traits,Allocator>& lhs, 75 const charT* rhs); 76 77template<class charT, class traits, class Allocator> 78 bool operator> (const charT* lhs, 79 const basic_string_view<charT,traits,Allocator>& rhs); 80*/ 81 82// operator<= 83/* 84template<class charT, class traits, class Allocator> 85 bool operator<=(const basic_string_view<charT,traits,Allocator>& lhs, 86 const basic_string_view<charT,traits,Allocator>& rhs); 87 88template<class charT, class traits, class Allocator> 89 bool operator<=(const basic_string_view<charT,traits,Allocator>& lhs, 90 const charT* rhs); 91 92template<class charT, class traits, class Allocator> 93 bool operator<=(const charT* lhs, 94 const basic_string_view<charT,traits,Allocator>& rhs); 95*/ 96 97// operator>= 98/* 99template<class charT, class traits, class Allocator> 100 bool operator>=(const basic_string_view<charT,traits,Allocator>& lhs, 101 const basic_string_view<charT,traits,Allocator>& rhs); 102 103template<class charT, class traits, class Allocator> 104 bool operator>=(const basic_string_view<charT,traits,Allocator>& lhs, 105 const charT* rhs); 106 107template<class charT, class traits, class Allocator> 108 bool operator>=(const charT* lhs, 109 const basic_string_view<charT,traits,Allocator>& rhs); 110*/ 111 112#include <string_view> 113#include <testsuite_hooks.h> 114 115void 116test01() 117{ 118 std::wstring_view str_0(L"costa rica"); 119 std::wstring_view str_1(L"costa marbella"); 120 std::wstring_view str_2(L"cost"); 121 std::wstring_view str_3(L"costa ricans"); 122 std::wstring_view str_4; 123 124 str_4 = str_0; 125 //comparisons between string_view objects 126 VERIFY( !(str_0 == str_1) ); 127 VERIFY( !(str_0 == str_2) ); 128 VERIFY( !(str_0 == str_3) ); 129 VERIFY( !(str_1 == str_0) ); 130 VERIFY( !(str_2 == str_0) ); 131 VERIFY( !(str_3 == str_0) ); 132 VERIFY( str_4 == str_0 ); 133 VERIFY( str_0 == str_4 ); 134 135 VERIFY( str_0 != str_1 ); 136 VERIFY( str_0 != str_2 ); 137 VERIFY( str_0 != str_3 ); 138 VERIFY( str_1 != str_0 ); 139 VERIFY( str_2 != str_0 ); 140 VERIFY( str_3 != str_0 ); 141 VERIFY( !(str_0 != str_4) ); 142 VERIFY( !(str_4 != str_0) ); 143 144 VERIFY( str_0 > str_1 ); //true cuz r>m 145 VERIFY( str_0 > str_2 ); 146 VERIFY( !(str_0 > str_3) ); 147 VERIFY( !(str_1 > str_0) ); //false cuz m<r 148 VERIFY( !(str_2 > str_0) ); 149 VERIFY( str_3 > str_0 ); 150 VERIFY( !(str_0 > str_4) ); 151 VERIFY( !(str_4 > str_0) ); 152 153 VERIFY( !(str_0 < str_1) ); //false cuz r>m 154 VERIFY( !(str_0 < str_2) ); 155 VERIFY( str_0 < str_3 ); 156 VERIFY( str_1 < str_0 ); //true cuz m<r 157 VERIFY( str_2 < str_0 ); 158 VERIFY( !(str_3 < str_0) ); 159 VERIFY( !(str_0 < str_4) ); 160 VERIFY( !(str_4 < str_0) ); 161 162 VERIFY( str_0 >= str_1 ); //true cuz r>m 163 VERIFY( str_0 >= str_2 ); 164 VERIFY( !(str_0 >= str_3) ); 165 VERIFY( !(str_1 >= str_0) );//false cuz m<r 166 VERIFY( !(str_2 >= str_0) ); 167 VERIFY( str_3 >= str_0 ); 168 VERIFY( str_0 >= str_4 ); 169 VERIFY( str_4 >= str_0 ); 170 171 VERIFY( !(str_0 <= str_1) );//false cuz r>m 172 VERIFY( !(str_0 <= str_2) ); 173 VERIFY( str_0 <= str_3 ); 174 VERIFY( str_1 <= str_0 );//true cuz m<r 175 VERIFY( str_2 <= str_0 ); 176 VERIFY( !(str_3 <= str_0) ); 177 VERIFY( str_0 <= str_4 ); 178 VERIFY( str_4 <= str_0 ); 179 180 //comparisons between string_view object and string_view literal 181 VERIFY( !(str_0 == L"costa marbella") ); 182 VERIFY( !(str_0 == L"cost") ); 183 VERIFY( !(str_0 == L"costa ricans") ); 184 VERIFY( !(L"costa marbella" == str_0) ); 185 VERIFY( !(L"cost" == str_0) ); 186 VERIFY( !(L"costa ricans" == str_0) ); 187 VERIFY( L"costa rica" == str_0 ); 188 VERIFY( str_0 == L"costa rica" ); 189 190 VERIFY( str_0 != L"costa marbella" ); 191 VERIFY( str_0 != L"cost" ); 192 VERIFY( str_0 != L"costa ricans" ); 193 VERIFY( L"costa marbella" != str_0 ); 194 VERIFY( L"cost" != str_0 ); 195 VERIFY( L"costa ricans" != str_0 ); 196 VERIFY( !(L"costa rica" != str_0) ); 197 VERIFY( !(str_0 != L"costa rica") ); 198 199 VERIFY( str_0 > L"costa marbella" ); //true cuz r>m 200 VERIFY( str_0 > L"cost" ); 201 VERIFY( !(str_0 > L"costa ricans") ); 202 VERIFY( !(L"costa marbella" > str_0) );//false cuz m<r 203 VERIFY( !(L"cost" > str_0) ); 204 VERIFY( L"costa ricans" > str_0 ); 205 VERIFY( !(L"costa rica" > str_0) ); 206 VERIFY( !(str_0 > L"costa rica") ); 207 208 VERIFY( !(str_0 < L"costa marbella") );//false cuz r>m 209 VERIFY( !(str_0 < L"cost") ); 210 VERIFY( str_0 < L"costa ricans" ); 211 VERIFY( L"costa marbella" < str_0 );//true cuz m<r 212 VERIFY( L"cost" < str_0 ); 213 VERIFY( !(L"costa ricans" < str_0) ); 214 VERIFY( !(L"costa rica" < str_0) ); 215 VERIFY( !(str_0 < L"costa rica") ); 216 217 VERIFY( str_0 >= L"costa marbella" );//true cuz r>m 218 VERIFY( str_0 >= L"cost" ); 219 VERIFY( !(str_0 >= L"costa ricans") ); 220 VERIFY( !(L"costa marbella" >= str_0) );//false cuz m<r 221 VERIFY( !(L"cost" >= str_0) ); 222 VERIFY( L"costa ricans" >= str_0 ); 223 VERIFY( L"costa rica" >= str_0 ); 224 VERIFY( str_0 >= L"costa rica" ); 225 226 VERIFY( !(str_0 <= L"costa marbella") );//false cuz r>m 227 VERIFY( !(str_0 <= L"cost") ); 228 VERIFY( str_0 <= L"costa ricans" ); 229 VERIFY( L"costa marbella" <= str_0 );//true cuz m<r 230 VERIFY( L"cost" <= str_0 ); 231 VERIFY( !(L"costa ricans" <= str_0) ); 232 VERIFY( L"costa rica" <= str_0 ); 233 VERIFY( str_0 <= L"costa rica" ); 234} 235 236constexpr bool 237test02() 238{ 239 std::wstring_view str_0(L"costa rica"); 240 std::wstring_view str_1(L"costa marbella"); 241 std::wstring_view str_2(L"cost"); 242 std::wstring_view str_3(L"costa ricans"); 243 std::wstring_view str_4; 244 245#undef VERIFY 246#define VERIFY(x) if (!(x)) return false 247 248 str_4 = str_0; 249 //comparisons between string_view objects 250 VERIFY( !(str_0 == str_1) ); 251 VERIFY( !(str_0 == str_2) ); 252 VERIFY( !(str_0 == str_3) ); 253 VERIFY( !(str_1 == str_0) ); 254 VERIFY( !(str_2 == str_0) ); 255 VERIFY( !(str_3 == str_0) ); 256 VERIFY( str_4 == str_0 ); 257 VERIFY( str_0 == str_4 ); 258 259 VERIFY( str_0 != str_1 ); 260 VERIFY( str_0 != str_2 ); 261 VERIFY( str_0 != str_3 ); 262 VERIFY( str_1 != str_0 ); 263 VERIFY( str_2 != str_0 ); 264 VERIFY( str_3 != str_0 ); 265 VERIFY( !(str_0 != str_4) ); 266 VERIFY( !(str_4 != str_0) ); 267 268 VERIFY( str_0 > str_1 ); //true cuz r>m 269 VERIFY( str_0 > str_2 ); 270 VERIFY( !(str_0 > str_3) ); 271 VERIFY( !(str_1 > str_0) ); //false cuz m<r 272 VERIFY( !(str_2 > str_0) ); 273 VERIFY( str_3 > str_0 ); 274 VERIFY( !(str_0 > str_4) ); 275 VERIFY( !(str_4 > str_0) ); 276 277 VERIFY( !(str_0 < str_1) ); //false cuz r>m 278 VERIFY( !(str_0 < str_2) ); 279 VERIFY( str_0 < str_3 ); 280 VERIFY( str_1 < str_0 ); //true cuz m<r 281 VERIFY( str_2 < str_0 ); 282 VERIFY( !(str_3 < str_0) ); 283 VERIFY( !(str_0 < str_4) ); 284 VERIFY( !(str_4 < str_0) ); 285 286 VERIFY( str_0 >= str_1 ); //true cuz r>m 287 VERIFY( str_0 >= str_2 ); 288 VERIFY( !(str_0 >= str_3) ); 289 VERIFY( !(str_1 >= str_0) );//false cuz m<r 290 VERIFY( !(str_2 >= str_0) ); 291 VERIFY( str_3 >= str_0 ); 292 VERIFY( str_0 >= str_4 ); 293 VERIFY( str_4 >= str_0 ); 294 295 VERIFY( !(str_0 <= str_1) );//false cuz r>m 296 VERIFY( !(str_0 <= str_2) ); 297 VERIFY( str_0 <= str_3 ); 298 VERIFY( str_1 <= str_0 );//true cuz m<r 299 VERIFY( str_2 <= str_0 ); 300 VERIFY( !(str_3 <= str_0) ); 301 VERIFY( str_0 <= str_4 ); 302 VERIFY( str_4 <= str_0 ); 303 304 //comparisons between string_view object and string_view literal 305 VERIFY( !(str_0 == L"costa marbella") ); 306 VERIFY( !(str_0 == L"cost") ); 307 VERIFY( !(str_0 == L"costa ricans") ); 308 VERIFY( !(L"costa marbella" == str_0) ); 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" ); 313 314 VERIFY( str_0 != L"costa marbella" ); 315 VERIFY( str_0 != L"cost" ); 316 VERIFY( str_0 != L"costa ricans" ); 317 VERIFY( L"costa marbella" != str_0 ); 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") ); 322 323 VERIFY( str_0 > L"costa marbella" ); //true cuz r>m 324 VERIFY( str_0 > L"cost" ); 325 VERIFY( !(str_0 > L"costa ricans") ); 326 VERIFY( !(L"costa marbella" > str_0) );//false cuz m<r 327 VERIFY( !(L"cost" > str_0) ); 328 VERIFY( L"costa ricans" > str_0 ); 329 VERIFY( !(L"costa rica" > str_0) ); 330 VERIFY( !(str_0 > L"costa rica") ); 331 332 VERIFY( !(str_0 < L"costa marbella") );//false cuz r>m 333 VERIFY( !(str_0 < L"cost") ); 334 VERIFY( str_0 < L"costa ricans" ); 335 VERIFY( L"costa marbella" < str_0 );//true cuz m<r 336 VERIFY( L"cost" < str_0 ); 337 VERIFY( !(L"costa ricans" < str_0) ); 338 VERIFY( !(L"costa rica" < str_0) ); 339 VERIFY( !(str_0 < L"costa rica") ); 340 341 VERIFY( str_0 >= L"costa marbella" );//true cuz r>m 342 VERIFY( str_0 >= L"cost" ); 343 VERIFY( !(str_0 >= L"costa ricans") ); 344 VERIFY( !(L"costa marbella" >= str_0) );//false cuz m<r 345 VERIFY( !(L"cost" >= str_0) ); 346 VERIFY( L"costa ricans" >= str_0 ); 347 VERIFY( L"costa rica" >= str_0 ); 348 VERIFY( str_0 >= L"costa rica" ); 349 350 VERIFY( !(str_0 <= L"costa marbella") );//false cuz r>m 351 VERIFY( !(str_0 <= L"cost") ); 352 VERIFY( str_0 <= L"costa ricans" ); 353 VERIFY( L"costa marbella" <= str_0 );//true cuz m<r 354 VERIFY( L"cost" <= str_0 ); 355 VERIFY( !(L"costa ricans" <= str_0) ); 356 VERIFY( L"costa rica" <= str_0 ); 357 VERIFY( str_0 <= L"costa rica" ); 358 359 return true; 360} 361 362int 363main() 364{ 365 test01(); 366 static_assert( test02() ); 367} 368