1bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant//===----------------------------------------------------------------------===//
2bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant//
3f5256e16dfc425c1d466f6308d4026d529ce9e0bHoward Hinnant//                     The LLVM Compiler Infrastructure
4bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant//
5b64f8b07c104c6cc986570ac8ee0ed16a9f23976Howard Hinnant// This file is dual licensed under the MIT and the University of Illinois Open
6b64f8b07c104c6cc986570ac8ee0ed16a9f23976Howard Hinnant// Source Licenses. See LICENSE.TXT for details.
7bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant//
8bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant//===----------------------------------------------------------------------===//
9bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant
10bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// <set>
11bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant
12bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// class set
13bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant
14bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// void swap(set& m);
15bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant
16bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#include <set>
17bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#include <cassert>
181b92188a82b01e76ac6e8ad5f997293c2a078adcMarshall Clow#include "test_allocator.h"
19bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#include "../../../test_compare.h"
20bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant
21bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantint main()
22bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{
23bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    typedef int V;
24bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    typedef std::set<int> M;
25bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    {
26bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        V ar1[] =
27bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        {
28bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        };
29bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        V ar2[] =
30bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        {
31bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        };
32bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        M m1(ar1, ar1+sizeof(ar1)/sizeof(ar1[0]));
33bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        M m2(ar2, ar2+sizeof(ar2)/sizeof(ar2[0]));
34bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        M m1_save = m1;
35bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        M m2_save = m2;
36bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        swap(m1, m2);
37bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(m1 == m2_save);
38bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(m2 == m1_save);
39bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    }
40bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    {
41bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        V ar1[] =
42bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        {
43bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        };
44bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        V ar2[] =
45bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        {
46bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant            5,
47bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant            6,
48bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant            7,
49bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant            8,
50bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant            9,
51bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant            10,
52bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant            11,
53bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant            12
54bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        };
55bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        M m1(ar1, ar1+sizeof(ar1)/sizeof(ar1[0]));
56bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        M m2(ar2, ar2+sizeof(ar2)/sizeof(ar2[0]));
57bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        M m1_save = m1;
58bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        M m2_save = m2;
59bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        swap(m1, m2);
60bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(m1 == m2_save);
61bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(m2 == m1_save);
62bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    }
63bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    {
64bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        V ar1[] =
65bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        {
66bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant            1,
67bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant            2,
68bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant            3,
69bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant            4
70bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        };
71bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        V ar2[] =
72bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        {
73bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        };
74bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        M m1(ar1, ar1+sizeof(ar1)/sizeof(ar1[0]));
75bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        M m2(ar2, ar2+sizeof(ar2)/sizeof(ar2[0]));
76bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        M m1_save = m1;
77bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        M m2_save = m2;
78bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        swap(m1, m2);
79bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(m1 == m2_save);
80bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(m2 == m1_save);
81bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    }
82bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    {
83bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        V ar1[] =
84bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        {
85bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant            1,
86bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant            2,
87bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant            3,
88bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant            4
89bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        };
90bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        V ar2[] =
91bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        {
92bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant            5,
93bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant            6,
94bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant            7,
95bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant            8,
96bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant            9,
97bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant            10,
98bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant            11,
99bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant            12
100bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        };
101bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        M m1(ar1, ar1+sizeof(ar1)/sizeof(ar1[0]));
102bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        M m2(ar2, ar2+sizeof(ar2)/sizeof(ar2[0]));
103bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        M m1_save = m1;
104bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        M m2_save = m2;
105bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        swap(m1, m2);
106bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(m1 == m2_save);
107bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(m2 == m1_save);
108bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    }
109bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    {
110bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        typedef test_allocator<V> A;
111bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        typedef test_compare<std::less<int> > C;
112b2e2a8f6f3a1c47ea942bac99dd75c53be967954Howard Hinnant        typedef std::set<int, C, A> M;
113bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        V ar1[] =
114bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        {
115bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant            1,
116bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant            2,
117bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant            3,
118bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant            4
119bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        };
120bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        V ar2[] =
121bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        {
122bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant            5,
123bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant            6,
124bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant            7,
125bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant            8,
126bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant            9,
127bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant            10,
128bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant            11,
129bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant            12
130bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        };
131bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        M m1(ar1, ar1+sizeof(ar1)/sizeof(ar1[0]), C(1), A(1));
132bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        M m2(ar2, ar2+sizeof(ar2)/sizeof(ar2[0]), C(2), A(2));
133bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        M m1_save = m1;
134bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        M m2_save = m2;
135bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        swap(m1, m2);
136bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(m1 == m2_save);
137bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(m2 == m1_save);
138bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(m1.key_comp() == C(2));
139bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(m1.get_allocator() == A(1));
140bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(m2.key_comp() == C(1));
141bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(m2.get_allocator() == A(2));
142bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    }
143bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    {
144bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        typedef other_allocator<V> A;
145bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        typedef test_compare<std::less<int> > C;
146b2e2a8f6f3a1c47ea942bac99dd75c53be967954Howard Hinnant        typedef std::set<int, C, A> M;
147bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        V ar1[] =
148bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        {
149bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant            1,
150bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant            2,
151bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant            3,
152bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant            4
153bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        };
154bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        V ar2[] =
155bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        {
156bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant            5,
157bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant            6,
158bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant            7,
159bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant            8,
160bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant            9,
161bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant            10,
162bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant            11,
163bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant            12
164bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        };
165bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        M m1(ar1, ar1+sizeof(ar1)/sizeof(ar1[0]), C(1), A(1));
166bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        M m2(ar2, ar2+sizeof(ar2)/sizeof(ar2[0]), C(2), A(2));
167bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        M m1_save = m1;
168bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        M m2_save = m2;
169bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        swap(m1, m2);
170bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(m1 == m2_save);
171bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(m2 == m1_save);
172bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(m1.key_comp() == C(2));
173bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(m1.get_allocator() == A(2));
174bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(m2.key_comp() == C(1));
175bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(m2.get_allocator() == A(1));
176bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    }
177bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant}
178