xref: /llvm-project/libcxx/test/std/strings/basic.string/string.iterators/iterators.pass.cpp (revision bbc6893b11cd85147543e84351176da7c3869cc4)
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