1 //===----------------------------------------------------------------------===//
2 //
3 // The LLVM Compiler Infrastructure
4 //
5 // This file is dual licensed under the MIT and the University of Illinois Open
6 // Source Licenses. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9
10 // <list>
11
12 // iterator begin();
13 // iterator end();
14 // const_iterator begin() const;
15 // const_iterator end() const;
16 // const_iterator cbegin() const;
17 // const_iterator cend() const;
18
19 #include <list>
20 #include <cassert>
21 #include <iterator>
22
23 #include "min_allocator.h"
24
25 struct A
26 {
27 int first;
28 int second;
29 };
30
main()31 int main()
32 {
33 {
34 typedef int T;
35 typedef std::list<T> C;
36 C c;
37 C::iterator i = c.begin();
38 C::iterator j = c.end();
39 assert(std::distance(i, j) == 0);
40 assert(i == j);
41 }
42 {
43 typedef int T;
44 typedef std::list<T> C;
45 const C c;
46 C::const_iterator i = c.begin();
47 C::const_iterator j = c.end();
48 assert(std::distance(i, j) == 0);
49 assert(i == j);
50 }
51 {
52 typedef int T;
53 typedef std::list<T> C;
54 C c;
55 C::const_iterator i = c.cbegin();
56 C::const_iterator j = c.cend();
57 assert(std::distance(i, j) == 0);
58 assert(i == j);
59 assert(i == c.end());
60 }
61 {
62 typedef int T;
63 typedef std::list<T> C;
64 const T t[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
65 C c(std::begin(t), std::end(t));
66 C::iterator i = c.begin();
67 assert(*i == 0);
68 ++i;
69 assert(*i == 1);
70 *i = 10;
71 assert(*i == 10);
72 assert(std::distance(c.begin(), c.end()) == 10);
73 }
74 {
75 typedef int T;
76 typedef std::list<T> C;
77 C::iterator i;
78 C::const_iterator j;
79 }
80 #if __cplusplus >= 201103L
81 {
82 typedef int T;
83 typedef std::list<T, min_allocator<T>> C;
84 C c;
85 C::iterator i = c.begin();
86 C::iterator j = c.end();
87 assert(std::distance(i, j) == 0);
88 assert(i == j);
89 }
90 {
91 typedef int T;
92 typedef std::list<T, min_allocator<T>> C;
93 const C c;
94 C::const_iterator i = c.begin();
95 C::const_iterator j = c.end();
96 assert(std::distance(i, j) == 0);
97 assert(i == j);
98 }
99 {
100 typedef int T;
101 typedef std::list<T, min_allocator<T>> C;
102 C c;
103 C::const_iterator i = c.cbegin();
104 C::const_iterator j = c.cend();
105 assert(std::distance(i, j) == 0);
106 assert(i == j);
107 assert(i == c.end());
108 }
109 {
110 typedef int T;
111 typedef std::list<T, min_allocator<T>> C;
112 const T t[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
113 C c(std::begin(t), std::end(t));
114 C::iterator i = c.begin();
115 assert(*i == 0);
116 ++i;
117 assert(*i == 1);
118 *i = 10;
119 assert(*i == 10);
120 assert(std::distance(c.begin(), c.end()) == 10);
121 }
122 {
123 typedef int T;
124 typedef std::list<T, min_allocator<T>> C;
125 C::iterator i;
126 C::const_iterator j;
127 }
128 {
129 typedef A T;
130 typedef std::list<T, min_allocator<T>> C;
131 C c = {A{1, 2}};
132 C::iterator i = c.begin();
133 i->first = 3;
134 C::const_iterator j = i;
135 assert(j->first == 3);
136 }
137 #endif
138 #if _LIBCPP_STD_VER > 11
139 {
140 std::list<int> c;
141 std::list<int>::iterator ii1{}, ii2{};
142 std::list<int>::iterator ii4 = ii1;
143 std::list<int>::const_iterator cii{};
144 assert ( ii1 == ii2 );
145 assert ( ii1 == ii4 );
146
147 assert (!(ii1 != ii2 ));
148
149 assert ( (ii1 == cii ));
150 assert ( (cii == ii1 ));
151 assert (!(ii1 != cii ));
152 assert (!(cii != ii1 ));
153
154 assert ( ii1 != c.cbegin());
155 assert ( cii != c.begin());
156 }
157 #endif
158
159 }
160