1//===----------------------------------------------------------------------===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8
9// <set>
10
11// class set
12
13// void swap(set& m);
14
15#include <set>
16#include <cassert>
17
18#include "test_macros.h"
19#include "min_allocator.h"
20
21int main(int, char**) {
22 {
23 typedef int V;
24 typedef std::set<int> M;
25 {
26 M m1;
27 M m2;
28 M m1_save = m1;
29 M m2_save = m2;
30 m1.swap(x&: m2);
31 assert(m1 == m2_save);
32 assert(m2 == m1_save);
33 }
34 {
35 V ar2[] = {5, 6, 7, 8, 9, 10, 11, 12};
36 M m1;
37 M m2(ar2, ar2 + sizeof(ar2) / sizeof(ar2[0]));
38 M m1_save = m1;
39 M m2_save = m2;
40 m1.swap(x&: m2);
41 assert(m1 == m2_save);
42 assert(m2 == m1_save);
43 }
44 {
45 V ar1[] = {1, 2, 3, 4};
46 M m1(ar1, ar1 + sizeof(ar1) / sizeof(ar1[0]));
47 M m2;
48 M m1_save = m1;
49 M m2_save = m2;
50 m1.swap(x&: m2);
51 assert(m1 == m2_save);
52 assert(m2 == m1_save);
53 }
54 {
55 V ar1[] = {1, 2, 3, 4};
56 V ar2[] = {5, 6, 7, 8, 9, 10, 11, 12};
57 M m1(ar1, ar1 + sizeof(ar1) / sizeof(ar1[0]));
58 M m2(ar2, ar2 + sizeof(ar2) / sizeof(ar2[0]));
59 M m1_save = m1;
60 M m2_save = m2;
61 m1.swap(x&: m2);
62 assert(m1 == m2_save);
63 assert(m2 == m1_save);
64 }
65 }
66#if TEST_STD_VER >= 11
67 {
68 typedef int V;
69 typedef std::set<int, std::less<int>, min_allocator<int>> M;
70 {
71 M m1;
72 M m2;
73 M m1_save = m1;
74 M m2_save = m2;
75 m1.swap(m2);
76 assert(m1 == m2_save);
77 assert(m2 == m1_save);
78 }
79 {
80 V ar2[] = {5, 6, 7, 8, 9, 10, 11, 12};
81 M m1;
82 M m2(ar2, ar2 + sizeof(ar2) / sizeof(ar2[0]));
83 M m1_save = m1;
84 M m2_save = m2;
85 m1.swap(m2);
86 assert(m1 == m2_save);
87 assert(m2 == m1_save);
88 }
89 {
90 V ar1[] = {1, 2, 3, 4};
91 M m1(ar1, ar1 + sizeof(ar1) / sizeof(ar1[0]));
92 M m2;
93 M m1_save = m1;
94 M m2_save = m2;
95 m1.swap(m2);
96 assert(m1 == m2_save);
97 assert(m2 == m1_save);
98 }
99 {
100 V ar1[] = {1, 2, 3, 4};
101 V ar2[] = {5, 6, 7, 8, 9, 10, 11, 12};
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#endif
112
113 return 0;
114}
115

source code of libcxx/test/std/containers/associative/set/set.special/member_swap.pass.cpp