15a83710eSEric Fiselier //===----------------------------------------------------------------------===// 25a83710eSEric Fiselier // 357b08b09SChandler Carruth // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 457b08b09SChandler Carruth // See https://llvm.org/LICENSE.txt for license information. 557b08b09SChandler Carruth // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 65a83710eSEric Fiselier // 75a83710eSEric Fiselier //===----------------------------------------------------------------------===// 85a83710eSEric Fiselier 931cbe0f2SLouis Dionne // UNSUPPORTED: c++03, c++11 106edc12c8SAsiri Rathnayake 115a83710eSEric Fiselier // <string> 125a83710eSEric Fiselier 13*425620ccSNikolas Klauser // iterator begin(); // constexpr since C++20 14*425620ccSNikolas Klauser // iterator end(); // constexpr since C++20 15*425620ccSNikolas Klauser // const_iterator begin() const; // constexpr since C++20 16*425620ccSNikolas Klauser // const_iterator end() const; // constexpr since C++20 17*425620ccSNikolas Klauser // const_iterator cbegin() const; // constexpr since C++20 18*425620ccSNikolas Klauser // const_iterator cend() const; // constexpr since C++20 195a83710eSEric Fiselier 205a83710eSEric Fiselier #include <string> 215a83710eSEric Fiselier #include <cassert> 225a83710eSEric Fiselier 237fc6a556SMarshall Clow #include "test_macros.h" 247fc6a556SMarshall Clow 25bbc6893bSArthur O'Dwyer template<class C> test()26c9dbf0f2SNikolas KlauserTEST_CONSTEXPR_CXX20 void test() 27bbc6893bSArthur O'Dwyer { 28bbc6893bSArthur O'Dwyer { // N3644 testing 29bbc6893bSArthur O'Dwyer typename C::iterator ii1{}, ii2{}; 30bbc6893bSArthur O'Dwyer typename C::iterator ii4 = ii1; 31bbc6893bSArthur O'Dwyer typename C::const_iterator cii{}; 32c9dbf0f2SNikolas Klauser 33bbc6893bSArthur O'Dwyer assert ( ii1 == ii2 ); 34bbc6893bSArthur O'Dwyer assert ( ii1 == ii4 ); 35bbc6893bSArthur O'Dwyer 36bbc6893bSArthur O'Dwyer assert (!(ii1 != ii2 )); 37bbc6893bSArthur O'Dwyer 38bbc6893bSArthur O'Dwyer assert ( (ii1 == cii )); 39bbc6893bSArthur O'Dwyer assert ( (cii == ii1 )); 40bbc6893bSArthur O'Dwyer assert (!(ii1 != cii )); 41bbc6893bSArthur O'Dwyer assert (!(cii != ii1 )); 42bbc6893bSArthur O'Dwyer assert (!(ii1 < cii )); 43bbc6893bSArthur O'Dwyer assert (!(cii < ii1 )); 44bbc6893bSArthur O'Dwyer assert ( (ii1 <= cii )); 45bbc6893bSArthur O'Dwyer assert ( (cii <= ii1 )); 46bbc6893bSArthur O'Dwyer assert (!(ii1 > cii )); 47bbc6893bSArthur O'Dwyer assert (!(cii > ii1 )); 48bbc6893bSArthur O'Dwyer assert ( (ii1 >= cii )); 49bbc6893bSArthur O'Dwyer assert ( (cii >= ii1 )); 50bbc6893bSArthur O'Dwyer assert (cii - ii1 == 0); 51bbc6893bSArthur O'Dwyer assert (ii1 - cii == 0); 52bbc6893bSArthur O'Dwyer } 53c9dbf0f2SNikolas Klauser { 54c9dbf0f2SNikolas Klauser C a; 55c9dbf0f2SNikolas Klauser typename C::iterator i1 = a.begin(); 56c9dbf0f2SNikolas Klauser typename C::iterator i2; 57c9dbf0f2SNikolas Klauser i2 = i1; 58c9dbf0f2SNikolas Klauser assert ( i1 == i2 ); 59c9dbf0f2SNikolas Klauser } 60bbc6893bSArthur O'Dwyer } 61bbc6893bSArthur O'Dwyer test()62c9dbf0f2SNikolas KlauserTEST_CONSTEXPR_CXX20 bool test() { 63bbc6893bSArthur O'Dwyer test<std::string>(); 64f4c1258dSLouis Dionne #ifndef TEST_HAS_NO_WIDE_CHARACTERS 65bbc6893bSArthur O'Dwyer test<std::wstring>(); 66f4c1258dSLouis Dionne #endif 675a83710eSEric Fiselier 68*425620ccSNikolas Klauser #ifndef TEST_HAS_NO_CHAR8_T 69bbc6893bSArthur O'Dwyer test<std::u8string>(); 707dad0bd6SMarshall Clow #endif 717dad0bd6SMarshall Clow 72bbc6893bSArthur O'Dwyer test<std::u16string>(); 73bbc6893bSArthur O'Dwyer test<std::u32string>(); 742df59c50SJF Bastien 75c9dbf0f2SNikolas Klauser return true; 76c9dbf0f2SNikolas Klauser } 77c9dbf0f2SNikolas Klauser main(int,char **)78c9dbf0f2SNikolas Klauserint main(int, char**) 79c9dbf0f2SNikolas Klauser { 80c9dbf0f2SNikolas Klauser test(); 81*425620ccSNikolas Klauser #if TEST_STD_VER > 17 82c9dbf0f2SNikolas Klauser static_assert(test()); 83c9dbf0f2SNikolas Klauser #endif 842df59c50SJF Bastien return 0; 855a83710eSEric Fiselier } 86