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