Home | History | Annotate | Download | only in list.cons
      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 // template <class InputIterator>
     13 //   list(InputIterator first, InputIterator last, const Allocator& = Allocator());
     14 
     15 #include <list>
     16 #include <cassert>
     17 #include "test_iterators.h"
     18 #include "../../../stack_allocator.h"
     19 #include "min_allocator.h"
     20 
     21 int main()
     22 {
     23     {
     24         int a[] = {0, 1, 2, 3};
     25         std::list<int> l(input_iterator<const int*>(a),
     26                          input_iterator<const int*>(a + sizeof(a)/sizeof(a[0])));
     27         assert(l.size() == sizeof(a)/sizeof(a[0]));
     28         assert(std::distance(l.begin(), l.end()) == sizeof(a)/sizeof(a[0]));
     29         int j = 0;
     30         for (std::list<int>::const_iterator i = l.begin(), e = l.end(); i != e; ++i, ++j)
     31             assert(*i == j);
     32     }
     33     {
     34         int a[] = {0, 1, 2, 3};
     35         std::list<int> l(input_iterator<const int*>(a),
     36                          input_iterator<const int*>(a + sizeof(a)/sizeof(a[0])),
     37                          std::allocator<int>());
     38         assert(l.size() == sizeof(a)/sizeof(a[0]));
     39         assert(std::distance(l.begin(), l.end()) == sizeof(a)/sizeof(a[0]));
     40         int j = 0;
     41         for (std::list<int>::const_iterator i = l.begin(), e = l.end(); i != e; ++i, ++j)
     42             assert(*i == j);
     43     }
     44     {
     45         int a[] = {0, 1, 2, 3};
     46         std::list<int, stack_allocator<int, sizeof(a)/sizeof(a[0])> > l(input_iterator<const int*>(a),
     47                          input_iterator<const int*>(a + sizeof(a)/sizeof(a[0])));
     48         assert(l.size() == sizeof(a)/sizeof(a[0]));
     49         assert(std::distance(l.begin(), l.end()) == sizeof(a)/sizeof(a[0]));
     50         int j = 0;
     51         for (std::list<int>::const_iterator i = l.begin(), e = l.end(); i != e; ++i, ++j)
     52             assert(*i == j);
     53     }
     54 #if __cplusplus >= 201103L
     55     {
     56         int a[] = {0, 1, 2, 3};
     57         std::list<int, min_allocator<int>> l(input_iterator<const int*>(a),
     58                          input_iterator<const int*>(a + sizeof(a)/sizeof(a[0])));
     59         assert(l.size() == sizeof(a)/sizeof(a[0]));
     60         assert(std::distance(l.begin(), l.end()) == sizeof(a)/sizeof(a[0]));
     61         int j = 0;
     62         for (std::list<int, min_allocator<int>>::const_iterator i = l.begin(), e = l.end(); i != e; ++i, ++j)
     63             assert(*i == j);
     64     }
     65     {
     66         int a[] = {0, 1, 2, 3};
     67         std::list<int, min_allocator<int>> l(input_iterator<const int*>(a),
     68                          input_iterator<const int*>(a + sizeof(a)/sizeof(a[0])),
     69                          min_allocator<int>());
     70         assert(l.size() == sizeof(a)/sizeof(a[0]));
     71         assert(std::distance(l.begin(), l.end()) == sizeof(a)/sizeof(a[0]));
     72         int j = 0;
     73         for (std::list<int, min_allocator<int>>::const_iterator i = l.begin(), e = l.end(); i != e; ++i, ++j)
     74             assert(*i == j);
     75     }
     76 #endif
     77 }
     78