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 before_begin();
13 // const_iterator before_begin() const;
14 // const_iterator cbefore_begin() const;
15
16 #include <forward_list>
17 #include <cassert>
18 #include <iterator>
19
20 #include "min_allocator.h"
21
main()22 int main()
23 {
24 {
25 typedef int T;
26 typedef std::forward_list<T> C;
27 C c;
28 C::iterator i = c.before_begin();
29 assert(std::distance(i, c.end()) == 1);
30 }
31 {
32 typedef int T;
33 typedef std::forward_list<T> C;
34 const C c;
35 C::const_iterator i = c.before_begin();
36 assert(std::distance(i, c.end()) == 1);
37 }
38 {
39 typedef int T;
40 typedef std::forward_list<T> C;
41 const C c;
42 C::const_iterator i = c.cbefore_begin();
43 assert(std::distance(i, c.end()) == 1);
44 assert(c.cbefore_begin() == c.before_begin());
45 }
46 {
47 typedef int T;
48 typedef std::forward_list<T> C;
49 const T t[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
50 C c(std::begin(t), std::end(t));
51 C::iterator i = c.before_begin();
52 assert(std::distance(i, c.end()) == 11);
53 assert(std::next(c.before_begin()) == c.begin());
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 const C c(std::begin(t), std::end(t));
60 C::const_iterator i = c.before_begin();
61 assert(std::distance(i, c.end()) == 11);
62 }
63 #if __cplusplus >= 201103L
64 {
65 typedef int T;
66 typedef std::forward_list<T, min_allocator<T>> C;
67 C c;
68 C::iterator i = c.before_begin();
69 assert(std::distance(i, c.end()) == 1);
70 }
71 {
72 typedef int T;
73 typedef std::forward_list<T, min_allocator<T>> C;
74 const C c;
75 C::const_iterator i = c.before_begin();
76 assert(std::distance(i, c.end()) == 1);
77 }
78 {
79 typedef int T;
80 typedef std::forward_list<T, min_allocator<T>> C;
81 const C c;
82 C::const_iterator i = c.cbefore_begin();
83 assert(std::distance(i, c.end()) == 1);
84 assert(c.cbefore_begin() == c.before_begin());
85 }
86 {
87 typedef int T;
88 typedef std::forward_list<T, min_allocator<T>> C;
89 const T t[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
90 C c(std::begin(t), std::end(t));
91 C::iterator i = c.before_begin();
92 assert(std::distance(i, c.end()) == 11);
93 assert(std::next(c.before_begin()) == c.begin());
94 }
95 {
96 typedef int T;
97 typedef std::forward_list<T, min_allocator<T>> C;
98 const T t[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
99 const C c(std::begin(t), std::end(t));
100 C::const_iterator i = c.before_begin();
101 assert(std::distance(i, c.end()) == 11);
102 }
103 #endif
104 }
105