1bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant//===----------------------------------------------------------------------===//
2bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant//
3f5256e16dfc425c1d466f6308d4026d529ce9e0bHoward Hinnant//                     The LLVM Compiler Infrastructure
4bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant//
5b64f8b07c104c6cc986570ac8ee0ed16a9f23976Howard Hinnant// This file is dual licensed under the MIT and the University of Illinois Open
6b64f8b07c104c6cc986570ac8ee0ed16a9f23976Howard Hinnant// Source Licenses. See LICENSE.TXT for details.
7bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant//
8bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant//===----------------------------------------------------------------------===//
9bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant
10bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// <list>
11bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant
12bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// void splice(const_iterator position, list<T,Allocator>& x, iterator i);
13bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant
145e57142c5902c3f73a6fdcb8cab55e88ffb43a56Howard Hinnant#if _LIBCPP_DEBUG >= 1
152062f377728e6c2a77842ca5b2c6428aab605ebcHoward Hinnant#define _LIBCPP_ASSERT(x, m) ((x) ? (void)0 : std::exit(0))
162062f377728e6c2a77842ca5b2c6428aab605ebcHoward Hinnant#endif
172062f377728e6c2a77842ca5b2c6428aab605ebcHoward Hinnant
18bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#include <list>
19bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#include <cassert>
20bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant
21061d0cc4db18d17bf01ed14c5db0be098205bd47Marshall Clow#include "min_allocator.h"
2229f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant
23bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantint main()
24bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{
25bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    int a1[] = {1, 2, 3};
26bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    int a2[] = {4, 5, 6};
27bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    {
28bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        std::list<int> l1;
29bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        std::list<int> l2(a2, a2+1);
30bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        l1.splice(l1.end(), l2, l2.begin());
31bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(l1.size() == 1);
32bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(distance(l1.begin(), l1.end()) == 1);
33bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(l2.size() == 0);
34bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(distance(l2.begin(), l2.end()) == 0);
35bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        std::list<int>::const_iterator i = l1.begin();
36bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(*i == 4);
37bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    }
38bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    {
39bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        std::list<int> l1;
40bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        std::list<int> l2(a2, a2+2);
41bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        l1.splice(l1.end(), l2, l2.begin());
42bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(l1.size() == 1);
43bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(distance(l1.begin(), l1.end()) == 1);
44bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(l2.size() == 1);
45bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(distance(l2.begin(), l2.end()) == 1);
46bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        std::list<int>::const_iterator i = l1.begin();
47bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(*i == 4);
48bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        i = l2.begin();
49bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(*i == 5);
50bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    }
51bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    {
52bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        std::list<int> l1;
53bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        std::list<int> l2(a2, a2+2);
54bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        l1.splice(l1.end(), l2, next(l2.begin()));
55bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(l1.size() == 1);
56bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(distance(l1.begin(), l1.end()) == 1);
57bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(l2.size() == 1);
58bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(distance(l2.begin(), l2.end()) == 1);
59bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        std::list<int>::const_iterator i = l1.begin();
60bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(*i == 5);
61bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        i = l2.begin();
62bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(*i == 4);
63bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    }
64bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    {
65bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        std::list<int> l1;
66bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        std::list<int> l2(a2, a2+3);
67bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        l1.splice(l1.end(), l2, l2.begin());
68bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(l1.size() == 1);
69bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(distance(l1.begin(), l1.end()) == 1);
70bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(l2.size() == 2);
71bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(distance(l2.begin(), l2.end()) == 2);
72bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        std::list<int>::const_iterator i = l1.begin();
73bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(*i == 4);
74bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        i = l2.begin();
75bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(*i == 5);
76bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        ++i;
77bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(*i == 6);
78bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    }
79bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    {
80bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        std::list<int> l1;
81bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        std::list<int> l2(a2, a2+3);
82bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        l1.splice(l1.end(), l2, next(l2.begin()));
83bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(l1.size() == 1);
84bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(distance(l1.begin(), l1.end()) == 1);
85bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(l2.size() == 2);
86bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(distance(l2.begin(), l2.end()) == 2);
87bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        std::list<int>::const_iterator i = l1.begin();
88bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(*i == 5);
89bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        i = l2.begin();
90bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(*i == 4);
91bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        ++i;
92bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(*i == 6);
93bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    }
94bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    {
95bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        std::list<int> l1;
96bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        std::list<int> l2(a2, a2+3);
97bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        l1.splice(l1.end(), l2, next(l2.begin(), 2));
98bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(l1.size() == 1);
99bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(distance(l1.begin(), l1.end()) == 1);
100bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(l2.size() == 2);
101bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(distance(l2.begin(), l2.end()) == 2);
102bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        std::list<int>::const_iterator i = l1.begin();
103bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(*i == 6);
104bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        i = l2.begin();
105bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(*i == 4);
106bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        ++i;
107bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(*i == 5);
108bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    }
109bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    {
110bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        std::list<int> l1(a1, a1+1);
111bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        l1.splice(l1.begin(), l1, l1.begin());
112bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(l1.size() == 1);
113bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(distance(l1.begin(), l1.end()) == 1);
114bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        std::list<int>::const_iterator i = l1.begin();
115bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(*i == 1);
116bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    }
117bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    {
118bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        std::list<int> l1(a1, a1+1);
119bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        std::list<int> l2(a2, a2+1);
120bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        l1.splice(l1.begin(), l2, l2.begin());
121bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(l1.size() == 2);
122bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(distance(l1.begin(), l1.end()) == 2);
123bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(l2.size() == 0);
124bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(distance(l2.begin(), l2.end()) == 0);
125bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        std::list<int>::const_iterator i = l1.begin();
126bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(*i == 4);
127bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        ++i;
128bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(*i == 1);
129bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    }
130bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    {
131bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        std::list<int> l1(a1, a1+1);
132bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        std::list<int> l2(a2, a2+1);
133bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        l1.splice(next(l1.begin()), l2, l2.begin());
134bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(l1.size() == 2);
135bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(distance(l1.begin(), l1.end()) == 2);
136bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(l2.size() == 0);
137bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(distance(l2.begin(), l2.end()) == 0);
138bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        std::list<int>::const_iterator i = l1.begin();
139bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(*i == 1);
140bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        ++i;
141bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(*i == 4);
142bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    }
143bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    {
144bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        std::list<int> l1(a1, a1+2);
145bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        l1.splice(l1.begin(), l1, l1.begin());
146bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(l1.size() == 2);
147bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(distance(l1.begin(), l1.end()) == 2);
148bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        std::list<int>::const_iterator i = l1.begin();
149bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(*i == 1);
150bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        ++i;
151bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(*i == 2);
152bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    }
153bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    {
154bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        std::list<int> l1(a1, a1+2);
155bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        l1.splice(l1.begin(), l1, next(l1.begin()));
156bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(l1.size() == 2);
157bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(distance(l1.begin(), l1.end()) == 2);
158bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        std::list<int>::const_iterator i = l1.begin();
159bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(*i == 2);
160bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        ++i;
161bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(*i == 1);
162bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    }
163bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    {
164bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        std::list<int> l1(a1, a1+2);
165bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        l1.splice(next(l1.begin()), l1, l1.begin());
166bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(l1.size() == 2);
167bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(distance(l1.begin(), l1.end()) == 2);
168bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        std::list<int>::const_iterator i = l1.begin();
169bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(*i == 1);
170bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        ++i;
171bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(*i == 2);
172bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    }
173bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    {
174bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        std::list<int> l1(a1, a1+2);
175bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        l1.splice(next(l1.begin()), l1, next(l1.begin()));
176bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(l1.size() == 2);
177bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(distance(l1.begin(), l1.end()) == 2);
178bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        std::list<int>::const_iterator i = l1.begin();
179bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(*i == 1);
180bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        ++i;
181bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(*i == 2);
182bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    }
1835e57142c5902c3f73a6fdcb8cab55e88ffb43a56Howard Hinnant#if _LIBCPP_DEBUG >= 1
1842062f377728e6c2a77842ca5b2c6428aab605ebcHoward Hinnant    {
1852062f377728e6c2a77842ca5b2c6428aab605ebcHoward Hinnant        std::list<int> v1(3);
1862062f377728e6c2a77842ca5b2c6428aab605ebcHoward Hinnant        std::list<int> v2(3);
1872062f377728e6c2a77842ca5b2c6428aab605ebcHoward Hinnant        v1.splice(v1.begin(), v2, v1.begin());
1882062f377728e6c2a77842ca5b2c6428aab605ebcHoward Hinnant        assert(false);
1892062f377728e6c2a77842ca5b2c6428aab605ebcHoward Hinnant    }
1902062f377728e6c2a77842ca5b2c6428aab605ebcHoward Hinnant#endif
19129f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant#if __cplusplus >= 201103L
19229f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant    {
19329f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant        std::list<int, min_allocator<int>> l1;
19429f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant        std::list<int, min_allocator<int>> l2(a2, a2+1);
19529f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant        l1.splice(l1.end(), l2, l2.begin());
19629f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant        assert(l1.size() == 1);
19729f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant        assert(distance(l1.begin(), l1.end()) == 1);
19829f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant        assert(l2.size() == 0);
19929f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant        assert(distance(l2.begin(), l2.end()) == 0);
20029f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant        std::list<int, min_allocator<int>>::const_iterator i = l1.begin();
20129f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant        assert(*i == 4);
20229f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant    }
20329f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant    {
20429f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant        std::list<int, min_allocator<int>> l1;
20529f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant        std::list<int, min_allocator<int>> l2(a2, a2+2);
20629f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant        l1.splice(l1.end(), l2, l2.begin());
20729f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant        assert(l1.size() == 1);
20829f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant        assert(distance(l1.begin(), l1.end()) == 1);
20929f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant        assert(l2.size() == 1);
21029f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant        assert(distance(l2.begin(), l2.end()) == 1);
21129f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant        std::list<int, min_allocator<int>>::const_iterator i = l1.begin();
21229f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant        assert(*i == 4);
21329f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant        i = l2.begin();
21429f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant        assert(*i == 5);
21529f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant    }
21629f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant    {
21729f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant        std::list<int, min_allocator<int>> l1;
21829f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant        std::list<int, min_allocator<int>> l2(a2, a2+2);
21929f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant        l1.splice(l1.end(), l2, next(l2.begin()));
22029f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant        assert(l1.size() == 1);
22129f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant        assert(distance(l1.begin(), l1.end()) == 1);
22229f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant        assert(l2.size() == 1);
22329f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant        assert(distance(l2.begin(), l2.end()) == 1);
22429f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant        std::list<int, min_allocator<int>>::const_iterator i = l1.begin();
22529f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant        assert(*i == 5);
22629f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant        i = l2.begin();
22729f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant        assert(*i == 4);
22829f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant    }
22929f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant    {
23029f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant        std::list<int, min_allocator<int>> l1;
23129f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant        std::list<int, min_allocator<int>> l2(a2, a2+3);
23229f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant        l1.splice(l1.end(), l2, l2.begin());
23329f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant        assert(l1.size() == 1);
23429f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant        assert(distance(l1.begin(), l1.end()) == 1);
23529f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant        assert(l2.size() == 2);
23629f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant        assert(distance(l2.begin(), l2.end()) == 2);
23729f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant        std::list<int, min_allocator<int>>::const_iterator i = l1.begin();
23829f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant        assert(*i == 4);
23929f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant        i = l2.begin();
24029f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant        assert(*i == 5);
24129f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant        ++i;
24229f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant        assert(*i == 6);
24329f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant    }
24429f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant    {
24529f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant        std::list<int, min_allocator<int>> l1;
24629f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant        std::list<int, min_allocator<int>> l2(a2, a2+3);
24729f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant        l1.splice(l1.end(), l2, next(l2.begin()));
24829f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant        assert(l1.size() == 1);
24929f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant        assert(distance(l1.begin(), l1.end()) == 1);
25029f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant        assert(l2.size() == 2);
25129f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant        assert(distance(l2.begin(), l2.end()) == 2);
25229f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant        std::list<int, min_allocator<int>>::const_iterator i = l1.begin();
25329f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant        assert(*i == 5);
25429f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant        i = l2.begin();
25529f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant        assert(*i == 4);
25629f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant        ++i;
25729f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant        assert(*i == 6);
25829f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant    }
25929f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant    {
26029f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant        std::list<int, min_allocator<int>> l1;
26129f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant        std::list<int, min_allocator<int>> l2(a2, a2+3);
26229f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant        l1.splice(l1.end(), l2, next(l2.begin(), 2));
26329f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant        assert(l1.size() == 1);
26429f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant        assert(distance(l1.begin(), l1.end()) == 1);
26529f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant        assert(l2.size() == 2);
26629f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant        assert(distance(l2.begin(), l2.end()) == 2);
26729f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant        std::list<int, min_allocator<int>>::const_iterator i = l1.begin();
26829f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant        assert(*i == 6);
26929f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant        i = l2.begin();
27029f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant        assert(*i == 4);
27129f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant        ++i;
27229f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant        assert(*i == 5);
27329f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant    }
27429f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant    {
27529f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant        std::list<int, min_allocator<int>> l1(a1, a1+1);
27629f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant        l1.splice(l1.begin(), l1, l1.begin());
27729f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant        assert(l1.size() == 1);
27829f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant        assert(distance(l1.begin(), l1.end()) == 1);
27929f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant        std::list<int, min_allocator<int>>::const_iterator i = l1.begin();
28029f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant        assert(*i == 1);
28129f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant    }
28229f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant    {
28329f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant        std::list<int, min_allocator<int>> l1(a1, a1+1);
28429f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant        std::list<int, min_allocator<int>> l2(a2, a2+1);
28529f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant        l1.splice(l1.begin(), l2, l2.begin());
28629f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant        assert(l1.size() == 2);
28729f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant        assert(distance(l1.begin(), l1.end()) == 2);
28829f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant        assert(l2.size() == 0);
28929f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant        assert(distance(l2.begin(), l2.end()) == 0);
29029f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant        std::list<int, min_allocator<int>>::const_iterator i = l1.begin();
29129f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant        assert(*i == 4);
29229f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant        ++i;
29329f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant        assert(*i == 1);
29429f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant    }
29529f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant    {
29629f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant        std::list<int, min_allocator<int>> l1(a1, a1+1);
29729f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant        std::list<int, min_allocator<int>> l2(a2, a2+1);
29829f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant        l1.splice(next(l1.begin()), l2, l2.begin());
29929f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant        assert(l1.size() == 2);
30029f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant        assert(distance(l1.begin(), l1.end()) == 2);
30129f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant        assert(l2.size() == 0);
30229f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant        assert(distance(l2.begin(), l2.end()) == 0);
30329f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant        std::list<int, min_allocator<int>>::const_iterator i = l1.begin();
30429f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant        assert(*i == 1);
30529f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant        ++i;
30629f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant        assert(*i == 4);
30729f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant    }
30829f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant    {
30929f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant        std::list<int, min_allocator<int>> l1(a1, a1+2);
31029f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant        l1.splice(l1.begin(), l1, l1.begin());
31129f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant        assert(l1.size() == 2);
31229f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant        assert(distance(l1.begin(), l1.end()) == 2);
31329f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant        std::list<int, min_allocator<int>>::const_iterator i = l1.begin();
31429f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant        assert(*i == 1);
31529f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant        ++i;
31629f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant        assert(*i == 2);
31729f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant    }
31829f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant    {
31929f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant        std::list<int, min_allocator<int>> l1(a1, a1+2);
32029f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant        l1.splice(l1.begin(), l1, next(l1.begin()));
32129f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant        assert(l1.size() == 2);
32229f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant        assert(distance(l1.begin(), l1.end()) == 2);
32329f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant        std::list<int, min_allocator<int>>::const_iterator i = l1.begin();
32429f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant        assert(*i == 2);
32529f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant        ++i;
32629f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant        assert(*i == 1);
32729f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant    }
32829f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant    {
32929f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant        std::list<int, min_allocator<int>> l1(a1, a1+2);
33029f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant        l1.splice(next(l1.begin()), l1, l1.begin());
33129f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant        assert(l1.size() == 2);
33229f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant        assert(distance(l1.begin(), l1.end()) == 2);
33329f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant        std::list<int, min_allocator<int>>::const_iterator i = l1.begin();
33429f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant        assert(*i == 1);
33529f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant        ++i;
33629f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant        assert(*i == 2);
33729f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant    }
33829f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant    {
33929f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant        std::list<int, min_allocator<int>> l1(a1, a1+2);
34029f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant        l1.splice(next(l1.begin()), l1, next(l1.begin()));
34129f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant        assert(l1.size() == 2);
34229f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant        assert(distance(l1.begin(), l1.end()) == 2);
34329f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant        std::list<int, min_allocator<int>>::const_iterator i = l1.begin();
34429f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant        assert(*i == 1);
34529f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant        ++i;
34629f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant        assert(*i == 2);
34729f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant    }
3485e57142c5902c3f73a6fdcb8cab55e88ffb43a56Howard Hinnant#if _LIBCPP_DEBUG >= 1
34929f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant    {
35029f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant        std::list<int, min_allocator<int>> v1(3);
35129f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant        std::list<int, min_allocator<int>> v2(3);
35229f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant        v1.splice(v1.begin(), v2, v1.begin());
35329f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant        assert(false);
35429f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant    }
35529f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant#endif
35629f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant#endif
357bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant}
358