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 // template <class InputIterator>
15 //     set(InputIterator first, InputIterator last,
16 //         const value_compare& comp, const allocator_type& a);
17 //
18 // template <class InputIterator>
19 //     set(InputIterator first, InputIterator last,
20 //         const allocator_type& a);
21 
22 #include <set>
23 #include <cassert>
24 
25 #include "test_iterators.h"
26 #include "../../../test_compare.h"
27 #include "test_allocator.h"
28 
main()29 int main()
30 {
31     typedef int V;
32     V ar[] =
33     {
34         1,
35         1,
36         1,
37         2,
38         2,
39         2,
40         3,
41         3,
42         3
43     };
44     typedef test_compare<std::less<V> > C;
45     typedef test_allocator<V> A;
46     std::set<V, C, A> m(input_iterator<const V*>(ar),
47                         input_iterator<const V*>(ar+sizeof(ar)/sizeof(ar[0])),
48                         C(5), A(7));
49     assert(m.value_comp() == C(5));
50     assert(m.get_allocator() == A(7));
51     assert(m.size() == 3);
52     assert(distance(m.begin(), m.end()) == 3);
53     assert(*m.begin() == 1);
54     assert(*next(m.begin()) == 2);
55     assert(*next(m.begin(), 2) == 3);
56 #if _LIBCPP_STD_VER > 11
57     {
58     typedef int V;
59     V ar[] =
60     {
61         1,
62         1,
63         1,
64         2,
65         2,
66         2,
67         3,
68         3,
69         3
70     };
71     typedef test_allocator<V> A;
72     typedef test_compare<std::less<int> > C;
73     A a(7);
74     std::set<V, C, A> m(ar, ar+sizeof(ar)/sizeof(ar[0]), a);
75 
76     assert(m.size() == 3);
77     assert(distance(m.begin(), m.end()) == 3);
78     assert(*m.begin() == 1);
79     assert(*next(m.begin()) == 2);
80     assert(*next(m.begin(), 2) == 3);
81     assert(m.get_allocator() == a);
82     }
83 #endif
84 }
85