1  // Copyright (C) 2008-2023 Free Software Foundation, Inc.
       2  //
       3  // This file is part of the GNU ISO C++ Library.  This library is free
       4  // software; you can redistribute it and/or modify it under the
       5  // terms of the GNU General Public License as published by the
       6  // Free Software Foundation; either version 3, or (at your option)
       7  // any later version.
       8  //
       9  // This library is distributed in the hope that it will be useful,
      10  // but WITHOUT ANY WARRANTY; without even the implied warranty of
      11  // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      12  // GNU General Public License for more details.
      13  //
      14  // You should have received a copy of the GNU General Public License along
      15  // with this library; see the file COPYING3.  If not see
      16  // <http://www.gnu.org/licenses/>.
      17  //
      18  
      19  #include <testsuite_allocator.h>
      20  
      21  template<typename _Tp>
      22  bool
      23  init_list()
      24  {
      25    using namespace __gnu_test;
      26    typedef _Tp list_type;
      27    typedef typename list_type::iterator iterator;
      28  
      29    const int arr10[10] = { 2, 4, 1, 7, 3, 8, 10, 5, 9, 6 };
      30    bool ok = true;
      31  
      32    tracker_allocator_counter::reset();
      33    {
      34      list_type c({ 2, 4, 1 });
      35      ok = check_construct_destroy("Construct from init-list", 3, 0) && ok;
      36      iterator i = c.begin();
      37      ok &= (*i++ == 2);
      38      ok &= (*i++ == 4);
      39    }
      40    ok = check_construct_destroy("Construct from init-list", 3, 3) && ok;
      41  
      42    {
      43      list_type c(arr10, arr10 + 10);
      44      tracker_allocator_counter::reset();
      45      iterator i = c.begin();
      46      ++i; ++i; ++i; ++i; ++i; ++i; ++i;
      47      c.insert(i, { 234, 42, 1 });
      48      ok = check_construct_destroy("Insert init-list", 3, 0) && ok;
      49      ok &= (*--i == 1);
      50      ok &= (*--i == 42);
      51    }
      52    ok = check_construct_destroy("Insert init-list", 3, 13) && ok;
      53  
      54    {
      55      list_type c;
      56      tracker_allocator_counter::reset();
      57      c = { 13, 0, 42 };
      58      ok = check_construct_destroy("Assign init-list", 3, 0) && ok;
      59      iterator i = c.begin();
      60      ok &= (*i++ == 13);
      61    }
      62    ok = check_construct_destroy("Assign init-list", 3, 3) && ok;
      63  
      64    return ok ? 0 : 1;
      65  }