xref: /llvm-project/libcxx/test/std/strings/basic.string/string.iterators/iterators.pass.cpp (revision 7fc6a55688c816f5fc1a5481ae7af25be7500356)
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++98, 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 int main(int, char**)
26 {
27     { // N3644 testing
28         typedef std::string C;
29         C::iterator ii1{}, ii2{};
30         C::iterator ii4 = ii1;
31         C::const_iterator cii{};
32         assert ( ii1 == ii2 );
33         assert ( ii1 == ii4 );
34         assert ( ii1 == cii );
35         assert ( !(ii1 != ii2 ));
36         assert ( !(ii1 != cii ));
37     }
38 
39     { // N3644 testing
40         typedef std::wstring C;
41         C::iterator ii1{}, ii2{};
42         C::iterator ii4 = ii1;
43         C::const_iterator cii{};
44         assert ( ii1 == ii2 );
45         assert ( ii1 == ii4 );
46         assert ( ii1 == cii );
47         assert ( !(ii1 != ii2 ));
48         assert ( !(ii1 != cii ));
49     }
50 
51 #if defined(__cpp_lib_char8_t) && __cpp_lib_char8_t >= 201811L
52     {
53         typedef std::u8string C;
54         C::iterator ii1{}, ii2{};
55         C::iterator ii4 = ii1;
56         C::const_iterator cii{};
57         assert ( ii1 == ii2 );
58         assert ( ii1 == ii4 );
59         assert ( ii1 == cii );
60         assert ( !(ii1 != ii2 ));
61         assert ( !(ii1 != cii ));
62     }
63 #endif
64 
65     { // N3644 testing
66         typedef std::u16string C;
67         C::iterator ii1{}, ii2{};
68         C::iterator ii4 = ii1;
69         C::const_iterator cii{};
70         assert ( ii1 == ii2 );
71         assert ( ii1 == ii4 );
72         assert ( ii1 == cii );
73         assert ( !(ii1 != ii2 ));
74         assert ( !(ii1 != cii ));
75     }
76 
77     { // N3644 testing
78         typedef std::u32string C;
79         C::iterator ii1{}, ii2{};
80         C::iterator ii4 = ii1;
81         C::const_iterator cii{};
82         assert ( ii1 == ii2 );
83         assert ( ii1 == ii4 );
84         assert ( ii1 == cii );
85         assert ( !(ii1 != ii2 ));
86         assert ( !(ii1 != cii ));
87     }
88 
89   return 0;
90 }
91