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// <vector>
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 <vector>
20#include <cassert>
21#include <iterator>
22
23#include "min_allocator.h"
24
25int main()
26{
27    {
28        typedef bool T;
29        typedef std::vector<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 bool T;
38        typedef std::vector<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 bool T;
47        typedef std::vector<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 bool T;
57        typedef std::vector<T> C;
58        C::iterator i;
59        C::const_iterator j;
60    }
61#if __cplusplus >= 201103L
62    {
63        typedef bool T;
64        typedef std::vector<T, min_allocator<T>> C;
65        C c;
66        C::iterator i = c.begin();
67        C::iterator j = c.end();
68        assert(std::distance(i, j) == 0);
69        assert(i == j);
70    }
71    {
72        typedef bool T;
73        typedef std::vector<T, min_allocator<T>> C;
74        const C c;
75        C::const_iterator i = c.begin();
76        C::const_iterator j = c.end();
77        assert(std::distance(i, j) == 0);
78        assert(i == j);
79    }
80    {
81        typedef bool T;
82        typedef std::vector<T, min_allocator<T>> C;
83        C c;
84        C::const_iterator i = c.cbegin();
85        C::const_iterator j = c.cend();
86        assert(std::distance(i, j) == 0);
87        assert(i == j);
88        assert(i == c.end());
89    }
90    {
91        typedef bool T;
92        typedef std::vector<T, min_allocator<T>> C;
93        C::iterator i;
94        C::const_iterator j;
95    }
96#endif
97#if _LIBCPP_STD_VER > 11
98    { // N3644 testing
99        std::vector<bool>::iterator ii1{}, ii2{};
100        std::vector<bool>::iterator ii4 = ii1;
101        std::vector<bool>::const_iterator cii{};
102        assert ( ii1 == ii2 );
103        assert ( ii1 == ii4 );
104
105        assert (!(ii1 != ii2 ));
106
107        assert ( (ii1 == cii ));
108        assert ( (cii == ii1 ));
109        assert (!(ii1 != cii ));
110        assert (!(cii != ii1 ));
111        assert (!(ii1 <  cii ));
112        assert (!(cii <  ii1 ));
113        assert ( (ii1 <= cii ));
114        assert ( (cii <= ii1 ));
115        assert (!(ii1 >  cii ));
116        assert (!(cii >  ii1 ));
117        assert ( (ii1 >= cii ));
118        assert ( (cii >= ii1 ));
119        assert (cii - ii1 == 0);
120        assert (ii1 - cii == 0);
121    }
122#endif
123}
124