Home | History | Annotate | Download | only in set.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 // <set>
     11 
     12 // class set
     13 
     14 // set(const set& m);
     15 
     16 #include <set>
     17 #include <cassert>
     18 
     19 #include "../../../test_compare.h"
     20 #include "test_allocator.h"
     21 
     22 int main()
     23 {
     24     {
     25         typedef int V;
     26         V ar[] =
     27         {
     28             1,
     29             1,
     30             1,
     31             2,
     32             2,
     33             2,
     34             3,
     35             3,
     36             3
     37         };
     38         typedef test_compare<std::less<int> > C;
     39         typedef test_allocator<V> A;
     40         std::set<int, C, A> mo(ar, ar+sizeof(ar)/sizeof(ar[0]), C(5), A(7));
     41         std::set<int, C, A> m = mo;
     42         assert(m.get_allocator() == A(7));
     43         assert(m.key_comp() == C(5));
     44         assert(m.size() == 3);
     45         assert(distance(m.begin(), m.end()) == 3);
     46         assert(*m.begin() == 1);
     47         assert(*next(m.begin()) == 2);
     48         assert(*next(m.begin(), 2) == 3);
     49 
     50         assert(mo.get_allocator() == A(7));
     51         assert(mo.key_comp() == C(5));
     52         assert(mo.size() == 3);
     53         assert(distance(mo.begin(), mo.end()) == 3);
     54         assert(*mo.begin() == 1);
     55         assert(*next(mo.begin()) == 2);
     56         assert(*next(mo.begin(), 2) == 3);
     57     }
     58 #ifndef _LIBCPP_HAS_NO_ADVANCED_SFINAE
     59     {
     60         typedef int V;
     61         V ar[] =
     62         {
     63             1,
     64             1,
     65             1,
     66             2,
     67             2,
     68             2,
     69             3,
     70             3,
     71             3
     72         };
     73         typedef test_compare<std::less<int> > C;
     74         typedef other_allocator<V> A;
     75         std::set<int, C, A> mo(ar, ar+sizeof(ar)/sizeof(ar[0]), C(5), A(7));
     76         std::set<int, C, A> m = mo;
     77         assert(m.get_allocator() == A(-2));
     78         assert(m.key_comp() == C(5));
     79         assert(m.size() == 3);
     80         assert(distance(m.begin(), m.end()) == 3);
     81         assert(*m.begin() == 1);
     82         assert(*next(m.begin()) == 2);
     83         assert(*next(m.begin(), 2) == 3);
     84 
     85         assert(mo.get_allocator() == A(7));
     86         assert(mo.key_comp() == C(5));
     87         assert(mo.size() == 3);
     88         assert(distance(mo.begin(), mo.end()) == 3);
     89         assert(*mo.begin() == 1);
     90         assert(*next(mo.begin()) == 2);
     91         assert(*next(mo.begin(), 2) == 3);
     92     }
     93 #endif  // _LIBCPP_HAS_NO_ADVANCED_SFINAE
     94 }
     95