Home | History | Annotate | Download | only in list.ops
      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