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<T,Allocator>& x, iterator i); 13 14 #include <list> 15 #include <cassert> 16 17 #include "test_macros.h" 18 #include "min_allocator.h" 19 20 int main() 21 { 22 int a1[] = {1, 2, 3}; 23 int a2[] = {4, 5, 6}; 24 { 25 std::list<int> l1; 26 std::list<int> l2(a2, a2+1); 27 l1.splice(l1.end(), l2, l2.begin()); 28 assert(l1.size() == 1); 29 assert(distance(l1.begin(), l1.end()) == 1); 30 assert(l2.size() == 0); 31 assert(distance(l2.begin(), l2.end()) == 0); 32 std::list<int>::const_iterator i = l1.begin(); 33 assert(*i == 4); 34 } 35 { 36 std::list<int> l1; 37 std::list<int> l2(a2, a2+2); 38 l1.splice(l1.end(), l2, l2.begin()); 39 assert(l1.size() == 1); 40 assert(distance(l1.begin(), l1.end()) == 1); 41 assert(l2.size() == 1); 42 assert(distance(l2.begin(), l2.end()) == 1); 43 std::list<int>::const_iterator i = l1.begin(); 44 assert(*i == 4); 45 i = l2.begin(); 46 assert(*i == 5); 47 } 48 { 49 std::list<int> l1; 50 std::list<int> l2(a2, a2+2); 51 l1.splice(l1.end(), l2, next(l2.begin())); 52 assert(l1.size() == 1); 53 assert(distance(l1.begin(), l1.end()) == 1); 54 assert(l2.size() == 1); 55 assert(distance(l2.begin(), l2.end()) == 1); 56 std::list<int>::const_iterator i = l1.begin(); 57 assert(*i == 5); 58 i = l2.begin(); 59 assert(*i == 4); 60 } 61 { 62 std::list<int> l1; 63 std::list<int> l2(a2, a2+3); 64 l1.splice(l1.end(), l2, l2.begin()); 65 assert(l1.size() == 1); 66 assert(distance(l1.begin(), l1.end()) == 1); 67 assert(l2.size() == 2); 68 assert(distance(l2.begin(), l2.end()) == 2); 69 std::list<int>::const_iterator i = l1.begin(); 70 assert(*i == 4); 71 i = l2.begin(); 72 assert(*i == 5); 73 ++i; 74 assert(*i == 6); 75 } 76 { 77 std::list<int> l1; 78 std::list<int> l2(a2, a2+3); 79 l1.splice(l1.end(), l2, next(l2.begin())); 80 assert(l1.size() == 1); 81 assert(distance(l1.begin(), l1.end()) == 1); 82 assert(l2.size() == 2); 83 assert(distance(l2.begin(), l2.end()) == 2); 84 std::list<int>::const_iterator i = l1.begin(); 85 assert(*i == 5); 86 i = l2.begin(); 87 assert(*i == 4); 88 ++i; 89 assert(*i == 6); 90 } 91 { 92 std::list<int> l1; 93 std::list<int> l2(a2, a2+3); 94 l1.splice(l1.end(), l2, next(l2.begin(), 2)); 95 assert(l1.size() == 1); 96 assert(distance(l1.begin(), l1.end()) == 1); 97 assert(l2.size() == 2); 98 assert(distance(l2.begin(), l2.end()) == 2); 99 std::list<int>::const_iterator i = l1.begin(); 100 assert(*i == 6); 101 i = l2.begin(); 102 assert(*i == 4); 103 ++i; 104 assert(*i == 5); 105 } 106 { 107 std::list<int> l1(a1, a1+1); 108 l1.splice(l1.begin(), l1, l1.begin()); 109 assert(l1.size() == 1); 110 assert(distance(l1.begin(), l1.end()) == 1); 111 std::list<int>::const_iterator i = l1.begin(); 112 assert(*i == 1); 113 } 114 { 115 std::list<int> l1(a1, a1+1); 116 std::list<int> l2(a2, a2+1); 117 l1.splice(l1.begin(), l2, l2.begin()); 118 assert(l1.size() == 2); 119 assert(distance(l1.begin(), l1.end()) == 2); 120 assert(l2.size() == 0); 121 assert(distance(l2.begin(), l2.end()) == 0); 122 std::list<int>::const_iterator i = l1.begin(); 123 assert(*i == 4); 124 ++i; 125 assert(*i == 1); 126 } 127 { 128 std::list<int> l1(a1, a1+1); 129 std::list<int> l2(a2, a2+1); 130 l1.splice(next(l1.begin()), l2, l2.begin()); 131 assert(l1.size() == 2); 132 assert(distance(l1.begin(), l1.end()) == 2); 133 assert(l2.size() == 0); 134 assert(distance(l2.begin(), l2.end()) == 0); 135 std::list<int>::const_iterator i = l1.begin(); 136 assert(*i == 1); 137 ++i; 138 assert(*i == 4); 139 } 140 { 141 std::list<int> l1(a1, a1+2); 142 l1.splice(l1.begin(), l1, l1.begin()); 143 assert(l1.size() == 2); 144 assert(distance(l1.begin(), l1.end()) == 2); 145 std::list<int>::const_iterator i = l1.begin(); 146 assert(*i == 1); 147 ++i; 148 assert(*i == 2); 149 } 150 { 151 std::list<int> l1(a1, a1+2); 152 l1.splice(l1.begin(), l1, next(l1.begin())); 153 assert(l1.size() == 2); 154 assert(distance(l1.begin(), l1.end()) == 2); 155 std::list<int>::const_iterator i = l1.begin(); 156 assert(*i == 2); 157 ++i; 158 assert(*i == 1); 159 } 160 { 161 std::list<int> l1(a1, a1+2); 162 l1.splice(next(l1.begin()), l1, l1.begin()); 163 assert(l1.size() == 2); 164 assert(distance(l1.begin(), l1.end()) == 2); 165 std::list<int>::const_iterator i = l1.begin(); 166 assert(*i == 1); 167 ++i; 168 assert(*i == 2); 169 } 170 { 171 std::list<int> l1(a1, a1+2); 172 l1.splice(next(l1.begin()), l1, next(l1.begin())); 173 assert(l1.size() == 2); 174 assert(distance(l1.begin(), l1.end()) == 2); 175 std::list<int>::const_iterator i = l1.begin(); 176 assert(*i == 1); 177 ++i; 178 assert(*i == 2); 179 } 180 #if TEST_STD_VER >= 11 181 { 182 std::list<int, min_allocator<int>> l1; 183 std::list<int, min_allocator<int>> l2(a2, a2+1); 184 l1.splice(l1.end(), l2, l2.begin()); 185 assert(l1.size() == 1); 186 assert(distance(l1.begin(), l1.end()) == 1); 187 assert(l2.size() == 0); 188 assert(distance(l2.begin(), l2.end()) == 0); 189 std::list<int, min_allocator<int>>::const_iterator i = l1.begin(); 190 assert(*i == 4); 191 } 192 { 193 std::list<int, min_allocator<int>> l1; 194 std::list<int, min_allocator<int>> l2(a2, a2+2); 195 l1.splice(l1.end(), l2, l2.begin()); 196 assert(l1.size() == 1); 197 assert(distance(l1.begin(), l1.end()) == 1); 198 assert(l2.size() == 1); 199 assert(distance(l2.begin(), l2.end()) == 1); 200 std::list<int, min_allocator<int>>::const_iterator i = l1.begin(); 201 assert(*i == 4); 202 i = l2.begin(); 203 assert(*i == 5); 204 } 205 { 206 std::list<int, min_allocator<int>> l1; 207 std::list<int, min_allocator<int>> l2(a2, a2+2); 208 l1.splice(l1.end(), l2, next(l2.begin())); 209 assert(l1.size() == 1); 210 assert(distance(l1.begin(), l1.end()) == 1); 211 assert(l2.size() == 1); 212 assert(distance(l2.begin(), l2.end()) == 1); 213 std::list<int, min_allocator<int>>::const_iterator i = l1.begin(); 214 assert(*i == 5); 215 i = l2.begin(); 216 assert(*i == 4); 217 } 218 { 219 std::list<int, min_allocator<int>> l1; 220 std::list<int, min_allocator<int>> l2(a2, a2+3); 221 l1.splice(l1.end(), l2, l2.begin()); 222 assert(l1.size() == 1); 223 assert(distance(l1.begin(), l1.end()) == 1); 224 assert(l2.size() == 2); 225 assert(distance(l2.begin(), l2.end()) == 2); 226 std::list<int, min_allocator<int>>::const_iterator i = l1.begin(); 227 assert(*i == 4); 228 i = l2.begin(); 229 assert(*i == 5); 230 ++i; 231 assert(*i == 6); 232 } 233 { 234 std::list<int, min_allocator<int>> l1; 235 std::list<int, min_allocator<int>> l2(a2, a2+3); 236 l1.splice(l1.end(), l2, next(l2.begin())); 237 assert(l1.size() == 1); 238 assert(distance(l1.begin(), l1.end()) == 1); 239 assert(l2.size() == 2); 240 assert(distance(l2.begin(), l2.end()) == 2); 241 std::list<int, min_allocator<int>>::const_iterator i = l1.begin(); 242 assert(*i == 5); 243 i = l2.begin(); 244 assert(*i == 4); 245 ++i; 246 assert(*i == 6); 247 } 248 { 249 std::list<int, min_allocator<int>> l1; 250 std::list<int, min_allocator<int>> l2(a2, a2+3); 251 l1.splice(l1.end(), l2, next(l2.begin(), 2)); 252 assert(l1.size() == 1); 253 assert(distance(l1.begin(), l1.end()) == 1); 254 assert(l2.size() == 2); 255 assert(distance(l2.begin(), l2.end()) == 2); 256 std::list<int, min_allocator<int>>::const_iterator i = l1.begin(); 257 assert(*i == 6); 258 i = l2.begin(); 259 assert(*i == 4); 260 ++i; 261 assert(*i == 5); 262 } 263 { 264 std::list<int, min_allocator<int>> l1(a1, a1+1); 265 l1.splice(l1.begin(), l1, l1.begin()); 266 assert(l1.size() == 1); 267 assert(distance(l1.begin(), l1.end()) == 1); 268 std::list<int, min_allocator<int>>::const_iterator i = l1.begin(); 269 assert(*i == 1); 270 } 271 { 272 std::list<int, min_allocator<int>> l1(a1, a1+1); 273 std::list<int, min_allocator<int>> l2(a2, a2+1); 274 l1.splice(l1.begin(), l2, l2.begin()); 275 assert(l1.size() == 2); 276 assert(distance(l1.begin(), l1.end()) == 2); 277 assert(l2.size() == 0); 278 assert(distance(l2.begin(), l2.end()) == 0); 279 std::list<int, min_allocator<int>>::const_iterator i = l1.begin(); 280 assert(*i == 4); 281 ++i; 282 assert(*i == 1); 283 } 284 { 285 std::list<int, min_allocator<int>> l1(a1, a1+1); 286 std::list<int, min_allocator<int>> l2(a2, a2+1); 287 l1.splice(next(l1.begin()), l2, l2.begin()); 288 assert(l1.size() == 2); 289 assert(distance(l1.begin(), l1.end()) == 2); 290 assert(l2.size() == 0); 291 assert(distance(l2.begin(), l2.end()) == 0); 292 std::list<int, min_allocator<int>>::const_iterator i = l1.begin(); 293 assert(*i == 1); 294 ++i; 295 assert(*i == 4); 296 } 297 { 298 std::list<int, min_allocator<int>> l1(a1, a1+2); 299 l1.splice(l1.begin(), l1, l1.begin()); 300 assert(l1.size() == 2); 301 assert(distance(l1.begin(), l1.end()) == 2); 302 std::list<int, min_allocator<int>>::const_iterator i = l1.begin(); 303 assert(*i == 1); 304 ++i; 305 assert(*i == 2); 306 } 307 { 308 std::list<int, min_allocator<int>> l1(a1, a1+2); 309 l1.splice(l1.begin(), l1, next(l1.begin())); 310 assert(l1.size() == 2); 311 assert(distance(l1.begin(), l1.end()) == 2); 312 std::list<int, min_allocator<int>>::const_iterator i = l1.begin(); 313 assert(*i == 2); 314 ++i; 315 assert(*i == 1); 316 } 317 { 318 std::list<int, min_allocator<int>> l1(a1, a1+2); 319 l1.splice(next(l1.begin()), l1, l1.begin()); 320 assert(l1.size() == 2); 321 assert(distance(l1.begin(), l1.end()) == 2); 322 std::list<int, min_allocator<int>>::const_iterator i = l1.begin(); 323 assert(*i == 1); 324 ++i; 325 assert(*i == 2); 326 } 327 { 328 std::list<int, min_allocator<int>> l1(a1, a1+2); 329 l1.splice(next(l1.begin()), l1, next(l1.begin())); 330 assert(l1.size() == 2); 331 assert(distance(l1.begin(), l1.end()) == 2); 332 std::list<int, min_allocator<int>>::const_iterator i = l1.begin(); 333 assert(*i == 1); 334 ++i; 335 assert(*i == 2); 336 } 337 #endif 338 } 339