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 // void splice(const_iterator position, list& x, iterator first, iterator last);
13
14 #if _LIBCPP_DEBUG >= 1
15 #define _LIBCPP_ASSERT(x, m) ((x) ? (void)0 : std::exit(0))
16 #endif
17
18 #include <list>
19 #include <cassert>
20
21 #include "min_allocator.h"
22
main()23 int main()
24 {
25 int a1[] = {1, 2, 3};
26 int a2[] = {4, 5, 6};
27 {
28 std::list<int> l1(a1, a1+3);
29 l1.splice(l1.begin(), l1, next(l1.begin()), next(l1.begin()));
30 assert(l1.size() == 3);
31 assert(distance(l1.begin(), l1.end()) == 3);
32 std::list<int>::const_iterator i = l1.begin();
33 assert(*i == 1);
34 ++i;
35 assert(*i == 2);
36 ++i;
37 assert(*i == 3);
38 }
39 {
40 std::list<int> l1(a1, a1+3);
41 l1.splice(l1.begin(), l1, next(l1.begin()), next(l1.begin(), 2));
42 assert(l1.size() == 3);
43 assert(distance(l1.begin(), l1.end()) == 3);
44 std::list<int>::const_iterator i = l1.begin();
45 assert(*i == 2);
46 ++i;
47 assert(*i == 1);
48 ++i;
49 assert(*i == 3);
50 }
51 {
52 std::list<int> l1(a1, a1+3);
53 l1.splice(l1.begin(), l1, next(l1.begin()), next(l1.begin(), 3));
54 assert(l1.size() == 3);
55 assert(distance(l1.begin(), l1.end()) == 3);
56 std::list<int>::const_iterator i = l1.begin();
57 assert(*i == 2);
58 ++i;
59 assert(*i == 3);
60 ++i;
61 assert(*i == 1);
62 }
63 {
64 std::list<int> l1(a1, a1+3);
65 std::list<int> l2(a2, a2+3);
66 l1.splice(l1.begin(), l2, next(l2.begin()), l2.end());
67 assert(l1.size() == 5);
68 assert(distance(l1.begin(), l1.end()) == 5);
69 std::list<int>::const_iterator i = l1.begin();
70 assert(*i == 5);
71 ++i;
72 assert(*i == 6);
73 ++i;
74 assert(*i == 1);
75 ++i;
76 assert(*i == 2);
77 ++i;
78 assert(*i == 3);
79 assert(l2.size() == 1);
80 i = l2.begin();
81 assert(*i == 4);
82 }
83 {
84 std::list<int> l1(a1, a1+3);
85 std::list<int> l2(a2, a2+3);
86 l1.splice(next(l1.begin()), l2, next(l2.begin()), l2.end());
87 assert(l1.size() == 5);
88 assert(distance(l1.begin(), l1.end()) == 5);
89 std::list<int>::const_iterator i = l1.begin();
90 assert(*i == 1);
91 ++i;
92 assert(*i == 5);
93 ++i;
94 assert(*i == 6);
95 ++i;
96 assert(*i == 2);
97 ++i;
98 assert(*i == 3);
99 assert(l2.size() == 1);
100 i = l2.begin();
101 assert(*i == 4);
102 }
103 {
104 std::list<int> l1(a1, a1+3);
105 std::list<int> l2(a2, a2+3);
106 l1.splice(l1.end(), l2, next(l2.begin()), l2.end());
107 assert(l1.size() == 5);
108 assert(distance(l1.begin(), l1.end()) == 5);
109 std::list<int>::const_iterator i = l1.begin();
110 assert(*i == 1);
111 ++i;
112 assert(*i == 2);
113 ++i;
114 assert(*i == 3);
115 ++i;
116 assert(*i == 5);
117 ++i;
118 assert(*i == 6);
119 assert(l2.size() == 1);
120 i = l2.begin();
121 assert(*i == 4);
122 }
123 #if _LIBCPP_DEBUG >= 1
124 {
125 std::list<int> v1(3);
126 std::list<int> v2(3);
127 v1.splice(v1.begin(), v2, v2.begin(), v1.end());
128 assert(false);
129 }
130 #endif
131 #if __cplusplus >= 201103L
132 {
133 std::list<int, min_allocator<int>> l1(a1, a1+3);
134 l1.splice(l1.begin(), l1, next(l1.begin()), next(l1.begin()));
135 assert(l1.size() == 3);
136 assert(distance(l1.begin(), l1.end()) == 3);
137 std::list<int, min_allocator<int>>::const_iterator i = l1.begin();
138 assert(*i == 1);
139 ++i;
140 assert(*i == 2);
141 ++i;
142 assert(*i == 3);
143 }
144 {
145 std::list<int, min_allocator<int>> l1(a1, a1+3);
146 l1.splice(l1.begin(), l1, next(l1.begin()), next(l1.begin(), 2));
147 assert(l1.size() == 3);
148 assert(distance(l1.begin(), l1.end()) == 3);
149 std::list<int, min_allocator<int>>::const_iterator i = l1.begin();
150 assert(*i == 2);
151 ++i;
152 assert(*i == 1);
153 ++i;
154 assert(*i == 3);
155 }
156 {
157 std::list<int, min_allocator<int>> l1(a1, a1+3);
158 l1.splice(l1.begin(), l1, next(l1.begin()), next(l1.begin(), 3));
159 assert(l1.size() == 3);
160 assert(distance(l1.begin(), l1.end()) == 3);
161 std::list<int, min_allocator<int>>::const_iterator i = l1.begin();
162 assert(*i == 2);
163 ++i;
164 assert(*i == 3);
165 ++i;
166 assert(*i == 1);
167 }
168 {
169 std::list<int, min_allocator<int>> l1(a1, a1+3);
170 std::list<int, min_allocator<int>> l2(a2, a2+3);
171 l1.splice(l1.begin(), l2, next(l2.begin()), l2.end());
172 assert(l1.size() == 5);
173 assert(distance(l1.begin(), l1.end()) == 5);
174 std::list<int, min_allocator<int>>::const_iterator i = l1.begin();
175 assert(*i == 5);
176 ++i;
177 assert(*i == 6);
178 ++i;
179 assert(*i == 1);
180 ++i;
181 assert(*i == 2);
182 ++i;
183 assert(*i == 3);
184 assert(l2.size() == 1);
185 i = l2.begin();
186 assert(*i == 4);
187 }
188 {
189 std::list<int, min_allocator<int>> l1(a1, a1+3);
190 std::list<int, min_allocator<int>> l2(a2, a2+3);
191 l1.splice(next(l1.begin()), l2, next(l2.begin()), l2.end());
192 assert(l1.size() == 5);
193 assert(distance(l1.begin(), l1.end()) == 5);
194 std::list<int, min_allocator<int>>::const_iterator i = l1.begin();
195 assert(*i == 1);
196 ++i;
197 assert(*i == 5);
198 ++i;
199 assert(*i == 6);
200 ++i;
201 assert(*i == 2);
202 ++i;
203 assert(*i == 3);
204 assert(l2.size() == 1);
205 i = l2.begin();
206 assert(*i == 4);
207 }
208 {
209 std::list<int, min_allocator<int>> l1(a1, a1+3);
210 std::list<int, min_allocator<int>> l2(a2, a2+3);
211 l1.splice(l1.end(), l2, next(l2.begin()), l2.end());
212 assert(l1.size() == 5);
213 assert(distance(l1.begin(), l1.end()) == 5);
214 std::list<int, min_allocator<int>>::const_iterator i = l1.begin();
215 assert(*i == 1);
216 ++i;
217 assert(*i == 2);
218 ++i;
219 assert(*i == 3);
220 ++i;
221 assert(*i == 5);
222 ++i;
223 assert(*i == 6);
224 assert(l2.size() == 1);
225 i = l2.begin();
226 assert(*i == 4);
227 }
228 #if _LIBCPP_DEBUG >= 1
229 {
230 std::list<int, min_allocator<int>> v1(3);
231 std::list<int, min_allocator<int>> v2(3);
232 v1.splice(v1.begin(), v2, v2.begin(), v1.end());
233 assert(false);
234 }
235 #endif
236 #endif
237 }
238