1 //===----------------------------------------------------------------------===// 2 // 3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4 // See https://llvm.org/LICENSE.txt for license information. 5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6 // 7 //===----------------------------------------------------------------------===// 8 9 // UNSUPPORTED: c++03, c++11 10 11 // <string> 12 13 // iterator begin(); 14 // iterator end(); 15 // const_iterator begin() const; 16 // const_iterator end() const; 17 // const_iterator cbegin() const; 18 // const_iterator cend() const; 19 20 #include <string> 21 #include <cassert> 22 23 #include "test_macros.h" 24 25 template<class C> 26 void test() 27 { 28 { // N3644 testing 29 typename C::iterator ii1{}, ii2{}; 30 typename C::iterator ii4 = ii1; 31 typename C::const_iterator cii{}; 32 assert ( ii1 == ii2 ); 33 assert ( ii1 == ii4 ); 34 35 assert (!(ii1 != ii2 )); 36 37 assert ( (ii1 == cii )); 38 assert ( (cii == ii1 )); 39 assert (!(ii1 != cii )); 40 assert (!(cii != ii1 )); 41 assert (!(ii1 < cii )); 42 assert (!(cii < ii1 )); 43 assert ( (ii1 <= cii )); 44 assert ( (cii <= ii1 )); 45 assert (!(ii1 > cii )); 46 assert (!(cii > ii1 )); 47 assert ( (ii1 >= cii )); 48 assert ( (cii >= ii1 )); 49 assert (cii - ii1 == 0); 50 assert (ii1 - cii == 0); 51 } 52 } 53 54 int main(int, char**) 55 { 56 test<std::string>(); 57 test<std::wstring>(); 58 59 #if defined(__cpp_lib_char8_t) && __cpp_lib_char8_t >= 201811L 60 test<std::u8string>(); 61 #endif 62 63 test<std::u16string>(); 64 test<std::u32string>(); 65 66 return 0; 67 } 68