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 multiset
13
14// void swap(multiset& m);
15
16#include <set>
17#include <cassert>
18
19#include "min_allocator.h"
20
21int main()
22{
23    {
24    typedef int V;
25    typedef std::multiset<int> M;
26    {
27        V ar1[] =
28        {
29        };
30        V ar2[] =
31        {
32        };
33        M m1(ar1, ar1+sizeof(ar1)/sizeof(ar1[0]));
34        M m2(ar2, ar2+sizeof(ar2)/sizeof(ar2[0]));
35        M m1_save = m1;
36        M m2_save = m2;
37        m1.swap(m2);
38        assert(m1 == m2_save);
39        assert(m2 == m1_save);
40    }
41    {
42        V ar1[] =
43        {
44        };
45        V ar2[] =
46        {
47            5,
48            6,
49            7,
50            8,
51            9,
52            10,
53            11,
54            12
55        };
56        M m1(ar1, ar1+sizeof(ar1)/sizeof(ar1[0]));
57        M m2(ar2, ar2+sizeof(ar2)/sizeof(ar2[0]));
58        M m1_save = m1;
59        M m2_save = m2;
60        m1.swap(m2);
61        assert(m1 == m2_save);
62        assert(m2 == m1_save);
63    }
64    {
65        V ar1[] =
66        {
67            1,
68            2,
69            3,
70            4
71        };
72        V ar2[] =
73        {
74        };
75        M m1(ar1, ar1+sizeof(ar1)/sizeof(ar1[0]));
76        M m2(ar2, ar2+sizeof(ar2)/sizeof(ar2[0]));
77        M m1_save = m1;
78        M m2_save = m2;
79        m1.swap(m2);
80        assert(m1 == m2_save);
81        assert(m2 == m1_save);
82    }
83    {
84        V ar1[] =
85        {
86            1,
87            2,
88            3,
89            4
90        };
91        V ar2[] =
92        {
93            5,
94            6,
95            7,
96            8,
97            9,
98            10,
99            11,
100            12
101        };
102        M m1(ar1, ar1+sizeof(ar1)/sizeof(ar1[0]));
103        M m2(ar2, ar2+sizeof(ar2)/sizeof(ar2[0]));
104        M m1_save = m1;
105        M m2_save = m2;
106        m1.swap(m2);
107        assert(m1 == m2_save);
108        assert(m2 == m1_save);
109    }
110    }
111#if __cplusplus >= 201103L
112    {
113    typedef int V;
114    typedef std::multiset<int, std::less<int>, min_allocator<int>> M;
115    {
116        V ar1[] =
117        {
118        };
119        V ar2[] =
120        {
121        };
122        M m1(ar1, ar1+sizeof(ar1)/sizeof(ar1[0]));
123        M m2(ar2, ar2+sizeof(ar2)/sizeof(ar2[0]));
124        M m1_save = m1;
125        M m2_save = m2;
126        m1.swap(m2);
127        assert(m1 == m2_save);
128        assert(m2 == m1_save);
129    }
130    {
131        V ar1[] =
132        {
133        };
134        V ar2[] =
135        {
136            5,
137            6,
138            7,
139            8,
140            9,
141            10,
142            11,
143            12
144        };
145        M m1(ar1, ar1+sizeof(ar1)/sizeof(ar1[0]));
146        M m2(ar2, ar2+sizeof(ar2)/sizeof(ar2[0]));
147        M m1_save = m1;
148        M m2_save = m2;
149        m1.swap(m2);
150        assert(m1 == m2_save);
151        assert(m2 == m1_save);
152    }
153    {
154        V ar1[] =
155        {
156            1,
157            2,
158            3,
159            4
160        };
161        V ar2[] =
162        {
163        };
164        M m1(ar1, ar1+sizeof(ar1)/sizeof(ar1[0]));
165        M m2(ar2, ar2+sizeof(ar2)/sizeof(ar2[0]));
166        M m1_save = m1;
167        M m2_save = m2;
168        m1.swap(m2);
169        assert(m1 == m2_save);
170        assert(m2 == m1_save);
171    }
172    {
173        V ar1[] =
174        {
175            1,
176            2,
177            3,
178            4
179        };
180        V ar2[] =
181        {
182            5,
183            6,
184            7,
185            8,
186            9,
187            10,
188            11,
189            12
190        };
191        M m1(ar1, ar1+sizeof(ar1)/sizeof(ar1[0]));
192        M m2(ar2, ar2+sizeof(ar2)/sizeof(ar2[0]));
193        M m1_save = m1;
194        M m2_save = m2;
195        m1.swap(m2);
196        assert(m1 == m2_save);
197        assert(m2 == m1_save);
198    }
199    }
200#endif
201}
202