]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - test/std/containers/sequences/forwardlist/forwardlist.iter/iterators.pass.cpp
Vendor import of libc++ trunk r290819:
[FreeBSD/FreeBSD.git] / test / std / containers / sequences / forwardlist / forwardlist.iter / iterators.pass.cpp
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 // <forward_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 <forward_list>
20 #include <cassert>
21 #include <iterator>
22
23 #include "test_macros.h"
24 #include "min_allocator.h"
25
26 int main()
27 {
28     {
29         typedef int T;
30         typedef std::forward_list<T> C;
31         C c;
32         C::iterator i = c.begin();
33         C::iterator j = c.end();
34         assert(std::distance(i, j) == 0);
35         assert(i == j);
36     }
37     {
38         typedef int T;
39         typedef std::forward_list<T> C;
40         const C c;
41         C::const_iterator i = c.begin();
42         C::const_iterator j = c.end();
43         assert(std::distance(i, j) == 0);
44         assert(i == j);
45     }
46     {
47         typedef int T;
48         typedef std::forward_list<T> C;
49         C c;
50         C::const_iterator i = c.cbegin();
51         C::const_iterator j = c.cend();
52         assert(std::distance(i, j) == 0);
53         assert(i == j);
54         assert(i == c.end());
55     }
56     {
57         typedef int T;
58         typedef std::forward_list<T> C;
59         const T t[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
60         C c(std::begin(t), std::end(t));
61         C::iterator i = c.begin();
62         assert(*i == 0);
63         ++i;
64         assert(*i == 1);
65         *i = 10;
66         assert(*i == 10);
67         assert(std::distance(c.begin(), c.end()) == 10);
68     }
69     {
70         typedef int T;
71         typedef std::forward_list<T> C;
72         C::iterator i;
73         C::const_iterator j;
74     }
75 #if TEST_STD_VER >= 11
76     {
77         typedef int T;
78         typedef std::forward_list<T, min_allocator<T>> C;
79         C c;
80         C::iterator i = c.begin();
81         C::iterator j = c.end();
82         assert(std::distance(i, j) == 0);
83         assert(i == j);
84     }
85     {
86         typedef int T;
87         typedef std::forward_list<T, min_allocator<T>> C;
88         const C c;
89         C::const_iterator i = c.begin();
90         C::const_iterator j = c.end();
91         assert(std::distance(i, j) == 0);
92         assert(i == j);
93     }
94     {
95         typedef int T;
96         typedef std::forward_list<T, min_allocator<T>> C;
97         C c;
98         C::const_iterator i = c.cbegin();
99         C::const_iterator j = c.cend();
100         assert(std::distance(i, j) == 0);
101         assert(i == j);
102         assert(i == c.end());
103     }
104     {
105         typedef int T;
106         typedef std::forward_list<T, min_allocator<T>> C;
107         const T t[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
108         C c(std::begin(t), std::end(t));
109         C::iterator i = c.begin();
110         assert(*i == 0);
111         ++i;
112         assert(*i == 1);
113         *i = 10;
114         assert(*i == 10);
115         assert(std::distance(c.begin(), c.end()) == 10);
116     }
117     {
118         typedef int T;
119         typedef std::forward_list<T, min_allocator<T>> C;
120         C::iterator i;
121         C::const_iterator j;
122     }
123 #endif
124 #if TEST_STD_VER > 11
125     { // N3644 testing
126         std::forward_list<int>::iterator ii1{}, ii2{};
127         std::forward_list<int>::iterator ii4 = ii1;
128         std::forward_list<int>::const_iterator cii{};
129         assert ( ii1 == ii2 );
130         assert ( ii1 == ii4 );
131
132         assert (!(ii1 != ii2 ));
133
134         assert ( (ii1 == cii ));
135         assert ( (cii == ii1 ));
136         assert (!(ii1 != cii ));
137         assert (!(cii != ii1 ));
138
139 //         std::forward_list<int> c;
140 //         assert ( ii1 != c.cbegin());
141 //         assert ( cii != c.begin());
142 //         assert ( cii != c.cend());
143 //         assert ( ii1 != c.end());
144     }
145 #endif
146 }