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

source code of libcxx/test/std/containers/sequences/forwardlist/forwardlist.iter/iterators.pass.cpp