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