1*0a6a1f1dSLionel Sambuc //===----------------------------------------------------------------------===//
2*0a6a1f1dSLionel Sambuc //
3*0a6a1f1dSLionel Sambuc //                     The LLVM Compiler Infrastructure
4*0a6a1f1dSLionel Sambuc //
5*0a6a1f1dSLionel Sambuc // This file is dual licensed under the MIT and the University of Illinois Open
6*0a6a1f1dSLionel Sambuc // Source Licenses. See LICENSE.TXT for details.
7*0a6a1f1dSLionel Sambuc //
8*0a6a1f1dSLionel Sambuc //===----------------------------------------------------------------------===//
9*0a6a1f1dSLionel Sambuc 
10*0a6a1f1dSLionel Sambuc // <set>
11*0a6a1f1dSLionel Sambuc 
12*0a6a1f1dSLionel Sambuc // class set
13*0a6a1f1dSLionel Sambuc 
14*0a6a1f1dSLionel Sambuc // set(const set& m);
15*0a6a1f1dSLionel Sambuc 
16*0a6a1f1dSLionel Sambuc #include <set>
17*0a6a1f1dSLionel Sambuc #include <cassert>
18*0a6a1f1dSLionel Sambuc 
19*0a6a1f1dSLionel Sambuc #include "../../../test_compare.h"
20*0a6a1f1dSLionel Sambuc #include "test_allocator.h"
21*0a6a1f1dSLionel Sambuc 
main()22*0a6a1f1dSLionel Sambuc int main()
23*0a6a1f1dSLionel Sambuc {
24*0a6a1f1dSLionel Sambuc     {
25*0a6a1f1dSLionel Sambuc         typedef int V;
26*0a6a1f1dSLionel Sambuc         V ar[] =
27*0a6a1f1dSLionel Sambuc         {
28*0a6a1f1dSLionel Sambuc             1,
29*0a6a1f1dSLionel Sambuc             1,
30*0a6a1f1dSLionel Sambuc             1,
31*0a6a1f1dSLionel Sambuc             2,
32*0a6a1f1dSLionel Sambuc             2,
33*0a6a1f1dSLionel Sambuc             2,
34*0a6a1f1dSLionel Sambuc             3,
35*0a6a1f1dSLionel Sambuc             3,
36*0a6a1f1dSLionel Sambuc             3
37*0a6a1f1dSLionel Sambuc         };
38*0a6a1f1dSLionel Sambuc         typedef test_compare<std::less<int> > C;
39*0a6a1f1dSLionel Sambuc         typedef test_allocator<V> A;
40*0a6a1f1dSLionel Sambuc         std::set<int, C, A> mo(ar, ar+sizeof(ar)/sizeof(ar[0]), C(5), A(7));
41*0a6a1f1dSLionel Sambuc         std::set<int, C, A> m = mo;
42*0a6a1f1dSLionel Sambuc         assert(m.get_allocator() == A(7));
43*0a6a1f1dSLionel Sambuc         assert(m.key_comp() == C(5));
44*0a6a1f1dSLionel Sambuc         assert(m.size() == 3);
45*0a6a1f1dSLionel Sambuc         assert(distance(m.begin(), m.end()) == 3);
46*0a6a1f1dSLionel Sambuc         assert(*m.begin() == 1);
47*0a6a1f1dSLionel Sambuc         assert(*next(m.begin()) == 2);
48*0a6a1f1dSLionel Sambuc         assert(*next(m.begin(), 2) == 3);
49*0a6a1f1dSLionel Sambuc 
50*0a6a1f1dSLionel Sambuc         assert(mo.get_allocator() == A(7));
51*0a6a1f1dSLionel Sambuc         assert(mo.key_comp() == C(5));
52*0a6a1f1dSLionel Sambuc         assert(mo.size() == 3);
53*0a6a1f1dSLionel Sambuc         assert(distance(mo.begin(), mo.end()) == 3);
54*0a6a1f1dSLionel Sambuc         assert(*mo.begin() == 1);
55*0a6a1f1dSLionel Sambuc         assert(*next(mo.begin()) == 2);
56*0a6a1f1dSLionel Sambuc         assert(*next(mo.begin(), 2) == 3);
57*0a6a1f1dSLionel Sambuc     }
58*0a6a1f1dSLionel Sambuc #ifndef _LIBCPP_HAS_NO_ADVANCED_SFINAE
59*0a6a1f1dSLionel Sambuc     {
60*0a6a1f1dSLionel Sambuc         typedef int V;
61*0a6a1f1dSLionel Sambuc         V ar[] =
62*0a6a1f1dSLionel Sambuc         {
63*0a6a1f1dSLionel Sambuc             1,
64*0a6a1f1dSLionel Sambuc             1,
65*0a6a1f1dSLionel Sambuc             1,
66*0a6a1f1dSLionel Sambuc             2,
67*0a6a1f1dSLionel Sambuc             2,
68*0a6a1f1dSLionel Sambuc             2,
69*0a6a1f1dSLionel Sambuc             3,
70*0a6a1f1dSLionel Sambuc             3,
71*0a6a1f1dSLionel Sambuc             3
72*0a6a1f1dSLionel Sambuc         };
73*0a6a1f1dSLionel Sambuc         typedef test_compare<std::less<int> > C;
74*0a6a1f1dSLionel Sambuc         typedef other_allocator<V> A;
75*0a6a1f1dSLionel Sambuc         std::set<int, C, A> mo(ar, ar+sizeof(ar)/sizeof(ar[0]), C(5), A(7));
76*0a6a1f1dSLionel Sambuc         std::set<int, C, A> m = mo;
77*0a6a1f1dSLionel Sambuc         assert(m.get_allocator() == A(-2));
78*0a6a1f1dSLionel Sambuc         assert(m.key_comp() == C(5));
79*0a6a1f1dSLionel Sambuc         assert(m.size() == 3);
80*0a6a1f1dSLionel Sambuc         assert(distance(m.begin(), m.end()) == 3);
81*0a6a1f1dSLionel Sambuc         assert(*m.begin() == 1);
82*0a6a1f1dSLionel Sambuc         assert(*next(m.begin()) == 2);
83*0a6a1f1dSLionel Sambuc         assert(*next(m.begin(), 2) == 3);
84*0a6a1f1dSLionel Sambuc 
85*0a6a1f1dSLionel Sambuc         assert(mo.get_allocator() == A(7));
86*0a6a1f1dSLionel Sambuc         assert(mo.key_comp() == C(5));
87*0a6a1f1dSLionel Sambuc         assert(mo.size() == 3);
88*0a6a1f1dSLionel Sambuc         assert(distance(mo.begin(), mo.end()) == 3);
89*0a6a1f1dSLionel Sambuc         assert(*mo.begin() == 1);
90*0a6a1f1dSLionel Sambuc         assert(*next(mo.begin()) == 2);
91*0a6a1f1dSLionel Sambuc         assert(*next(mo.begin(), 2) == 3);
92*0a6a1f1dSLionel Sambuc     }
93*0a6a1f1dSLionel Sambuc #endif  // _LIBCPP_HAS_NO_ADVANCED_SFINAE
94*0a6a1f1dSLionel Sambuc }
95