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 #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 
     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