14684ddb6SLionel Sambuc //===----------------------------------------------------------------------===//
24684ddb6SLionel Sambuc //
34684ddb6SLionel Sambuc //                     The LLVM Compiler Infrastructure
44684ddb6SLionel Sambuc //
54684ddb6SLionel Sambuc // This file is dual licensed under the MIT and the University of Illinois Open
64684ddb6SLionel Sambuc // Source Licenses. See LICENSE.TXT for details.
74684ddb6SLionel Sambuc //
84684ddb6SLionel Sambuc //===----------------------------------------------------------------------===//
94684ddb6SLionel Sambuc 
104684ddb6SLionel Sambuc // <set>
114684ddb6SLionel Sambuc 
124684ddb6SLionel Sambuc // class set
134684ddb6SLionel Sambuc 
144684ddb6SLionel Sambuc // set(const set& m);
154684ddb6SLionel Sambuc 
164684ddb6SLionel Sambuc #include <set>
174684ddb6SLionel Sambuc #include <cassert>
184684ddb6SLionel Sambuc 
194684ddb6SLionel Sambuc #include "../../../test_compare.h"
20*0a6a1f1dSLionel Sambuc #include "test_allocator.h"
214684ddb6SLionel Sambuc 
main()224684ddb6SLionel Sambuc int main()
234684ddb6SLionel Sambuc {
244684ddb6SLionel Sambuc     {
254684ddb6SLionel Sambuc         typedef int V;
264684ddb6SLionel Sambuc         V ar[] =
274684ddb6SLionel Sambuc         {
284684ddb6SLionel Sambuc             1,
294684ddb6SLionel Sambuc             1,
304684ddb6SLionel Sambuc             1,
314684ddb6SLionel Sambuc             2,
324684ddb6SLionel Sambuc             2,
334684ddb6SLionel Sambuc             2,
344684ddb6SLionel Sambuc             3,
354684ddb6SLionel Sambuc             3,
364684ddb6SLionel Sambuc             3
374684ddb6SLionel Sambuc         };
384684ddb6SLionel Sambuc         typedef test_compare<std::less<int> > C;
394684ddb6SLionel Sambuc         typedef test_allocator<V> A;
404684ddb6SLionel Sambuc         std::set<int, C, A> mo(ar, ar+sizeof(ar)/sizeof(ar[0]), C(5), A(7));
414684ddb6SLionel Sambuc         std::set<int, C, A> m = mo;
424684ddb6SLionel Sambuc         assert(m.get_allocator() == A(7));
434684ddb6SLionel Sambuc         assert(m.key_comp() == C(5));
444684ddb6SLionel Sambuc         assert(m.size() == 3);
454684ddb6SLionel Sambuc         assert(distance(m.begin(), m.end()) == 3);
464684ddb6SLionel Sambuc         assert(*m.begin() == 1);
474684ddb6SLionel Sambuc         assert(*next(m.begin()) == 2);
484684ddb6SLionel Sambuc         assert(*next(m.begin(), 2) == 3);
494684ddb6SLionel Sambuc 
504684ddb6SLionel Sambuc         assert(mo.get_allocator() == A(7));
514684ddb6SLionel Sambuc         assert(mo.key_comp() == C(5));
524684ddb6SLionel Sambuc         assert(mo.size() == 3);
534684ddb6SLionel Sambuc         assert(distance(mo.begin(), mo.end()) == 3);
544684ddb6SLionel Sambuc         assert(*mo.begin() == 1);
554684ddb6SLionel Sambuc         assert(*next(mo.begin()) == 2);
564684ddb6SLionel Sambuc         assert(*next(mo.begin(), 2) == 3);
574684ddb6SLionel Sambuc     }
584684ddb6SLionel Sambuc #ifndef _LIBCPP_HAS_NO_ADVANCED_SFINAE
594684ddb6SLionel Sambuc     {
604684ddb6SLionel Sambuc         typedef int V;
614684ddb6SLionel Sambuc         V ar[] =
624684ddb6SLionel Sambuc         {
634684ddb6SLionel Sambuc             1,
644684ddb6SLionel Sambuc             1,
654684ddb6SLionel Sambuc             1,
664684ddb6SLionel Sambuc             2,
674684ddb6SLionel Sambuc             2,
684684ddb6SLionel Sambuc             2,
694684ddb6SLionel Sambuc             3,
704684ddb6SLionel Sambuc             3,
714684ddb6SLionel Sambuc             3
724684ddb6SLionel Sambuc         };
734684ddb6SLionel Sambuc         typedef test_compare<std::less<int> > C;
744684ddb6SLionel Sambuc         typedef other_allocator<V> A;
754684ddb6SLionel Sambuc         std::set<int, C, A> mo(ar, ar+sizeof(ar)/sizeof(ar[0]), C(5), A(7));
764684ddb6SLionel Sambuc         std::set<int, C, A> m = mo;
774684ddb6SLionel Sambuc         assert(m.get_allocator() == A(-2));
784684ddb6SLionel Sambuc         assert(m.key_comp() == C(5));
794684ddb6SLionel Sambuc         assert(m.size() == 3);
804684ddb6SLionel Sambuc         assert(distance(m.begin(), m.end()) == 3);
814684ddb6SLionel Sambuc         assert(*m.begin() == 1);
824684ddb6SLionel Sambuc         assert(*next(m.begin()) == 2);
834684ddb6SLionel Sambuc         assert(*next(m.begin(), 2) == 3);
844684ddb6SLionel Sambuc 
854684ddb6SLionel Sambuc         assert(mo.get_allocator() == A(7));
864684ddb6SLionel Sambuc         assert(mo.key_comp() == C(5));
874684ddb6SLionel Sambuc         assert(mo.size() == 3);
884684ddb6SLionel Sambuc         assert(distance(mo.begin(), mo.end()) == 3);
894684ddb6SLionel Sambuc         assert(*mo.begin() == 1);
904684ddb6SLionel Sambuc         assert(*next(mo.begin()) == 2);
914684ddb6SLionel Sambuc         assert(*next(mo.begin(), 2) == 3);
924684ddb6SLionel Sambuc     }
934684ddb6SLionel Sambuc #endif  // _LIBCPP_HAS_NO_ADVANCED_SFINAE
944684ddb6SLionel Sambuc }
95