(root)/
gcc-13.2.0/
libstdc++-v3/
testsuite/
23_containers/
list/
modifiers/
swap/
2.h
       1  // 2005-12-20  Paolo Carlini  <pcarlini@suse.de>
       2  
       3  // Copyright (C) 2005-2023 Free Software Foundation, Inc.
       4  //
       5  // This file is part of the GNU ISO C++ Library.  This library is free
       6  // software; you can redistribute it and/or modify it under the
       7  // terms of the GNU General Public License as published by the
       8  // Free Software Foundation; either version 3, or (at your option)
       9  // any later version.
      10  
      11  // This library is distributed in the hope that it will be useful,
      12  // but WITHOUT ANY WARRANTY; without even the implied warranty of
      13  // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      14  // GNU General Public License for more details.
      15  
      16  // You should have received a copy of the GNU General Public License along
      17  // with this library; see the file COPYING3.  If not see
      18  // <http://www.gnu.org/licenses/>.
      19  
      20  // 23.2.2.3 list::swap
      21  
      22  #include <testsuite_hooks.h>
      23  #include <testsuite_allocator.h>
      24  
      25  // uneq_allocator as a non-empty allocator.
      26  template<typename _Tp>
      27  void
      28  swap2()
      29  {
      30    using namespace std;
      31  
      32    typedef _Tp list_type;
      33    typedef typename list_type::allocator_type allocator_type;
      34    typedef typename list_type::size_type size_type;
      35  
      36    const char title01[] = "Rivers of sand";
      37    const char title02[] = "Concret PH";
      38    const char title03[] = "Sonatas and Interludes for Prepared Piano";
      39    const char title04[] = "never as tired as when i'm waking up";
      40  
      41    const size_t N1 = sizeof(title01);
      42    const size_t N2 = sizeof(title02);
      43    const size_t N3 = sizeof(title03);
      44    const size_t N4 = sizeof(title04);
      45  
      46    size_type size01, size02;
      47  
      48    allocator_type alloc01(1);
      49  
      50    list_type lis01(alloc01);
      51    size01 = lis01.size();
      52    list_type lis02(alloc01);
      53    size02 = lis02.size();
      54    
      55    lis01.swap(lis02);
      56    VERIFY( lis01.size() == size02 );
      57    VERIFY( lis01.empty() );
      58    VERIFY( lis02.size() == size01 );
      59    VERIFY( lis02.empty() );
      60  
      61    list_type lis03(alloc01);
      62    size01 = lis03.size();
      63    list_type lis04(title02, title02 + N2, alloc01);
      64    size02 = lis04.size();
      65    
      66    lis03.swap(lis04);
      67    VERIFY( lis03.size() == size02 );
      68    VERIFY( equal(lis03.begin(), lis03.end(), title02) );
      69    VERIFY( lis04.size() == size01 );
      70    VERIFY( lis04.empty() );
      71    
      72    list_type lis05(title01, title01 + N1, alloc01);
      73    size01 = lis05.size();
      74    list_type lis06(title02, title02 + N2, alloc01);
      75    size02 = lis06.size();
      76    
      77    lis05.swap(lis06);
      78    VERIFY( lis05.size() == size02 );
      79    VERIFY( equal(lis05.begin(), lis05.end(), title02) );
      80    VERIFY( lis06.size() == size01 );
      81    VERIFY( equal(lis06.begin(), lis06.end(), title01) );
      82  
      83    list_type lis07(title01, title01 + N1, alloc01);
      84    size01 = lis07.size();
      85    list_type lis08(title03, title03 + N3, alloc01);
      86    size02 = lis08.size();
      87  
      88    lis07.swap(lis08);
      89    VERIFY( lis07.size() == size02 );
      90    VERIFY( equal(lis07.begin(), lis07.end(), title03) );
      91    VERIFY( lis08.size() == size01 );
      92    VERIFY( equal(lis08.begin(), lis08.end(), title01) );
      93  
      94    list_type lis09(title03, title03 + N3, alloc01);
      95    size01 = lis09.size();
      96    list_type lis10(title04, title04 + N4, alloc01);
      97    size02 = lis10.size();
      98  
      99    lis09.swap(lis10);
     100    VERIFY( lis09.size() == size02 );
     101    VERIFY( equal(lis09.begin(), lis09.end(), title04) );
     102    VERIFY( lis10.size() == size01 );
     103    VERIFY( equal(lis10.begin(), lis10.end(), title03) );
     104  
     105    list_type lis11(title04, title04 + N4, alloc01);
     106    size01 = lis11.size();
     107    list_type lis12(title01, title01 + N1, alloc01);
     108    size02 = lis12.size();
     109  
     110    lis11.swap(lis12);
     111    VERIFY( lis11.size() == size02 );
     112    VERIFY( equal(lis11.begin(), lis11.end(), title01) );
     113    VERIFY( lis12.size() == size01 );
     114    VERIFY( equal(lis12.begin(), lis12.end(), title04) );
     115  
     116    list_type lis13(title03, title03 + N3, alloc01);
     117    size01 = lis13.size();
     118    list_type lis14(title03, title03 + N3, alloc01);
     119    size02 = lis14.size();
     120  
     121    lis13.swap(lis14);
     122    VERIFY( lis13.size() == size02 );
     123    VERIFY( equal(lis13.begin(), lis13.end(), title03) );
     124    VERIFY( lis14.size() == size01 );
     125    VERIFY( equal(lis14.begin(), lis14.end(), title03) );
     126  }