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#include "test_macros.h"
18#include "test_allocator.h"
19#include "../../../test_compare.h"
20
21int main(int, char**) {
22 typedef int V;
23 {
24 typedef std::set<int> M;
25 {
26 M m1;
27 M m2;
28 M m1_save = m1;
29 M m2_save = m2;
30 swap(x&: m1, y&: 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 swap(x&: m1, y&: 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 swap(x&: m1, y&: 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 swap(x&: m1, y&: m2);
62 assert(m1 == m2_save);
63 assert(m2 == m1_save);
64 }
65 }
66 {
67 typedef test_allocator<V> A;
68 typedef test_less<int> C;
69 typedef std::set<int, C, A> M;
70 V ar1[] = {1, 2, 3, 4};
71 V ar2[] = {5, 6, 7, 8, 9, 10, 11, 12};
72 M m1(ar1, ar1 + sizeof(ar1) / sizeof(ar1[0]), C(1), A(1, 1));
73 M m2(ar2, ar2 + sizeof(ar2) / sizeof(ar2[0]), C(2), A(1, 2));
74 M m1_save = m1;
75 M m2_save = m2;
76 swap(m1, m2);
77 assert(m1 == m2_save);
78 assert(m2 == m1_save);
79 assert(m1.key_comp() == C(2));
80 assert(m1.get_allocator().get_id() == 1);
81 assert(m2.key_comp() == C(1));
82 assert(m2.get_allocator().get_id() == 2);
83 }
84 {
85 typedef other_allocator<V> A;
86 typedef test_less<int> C;
87 typedef std::set<int, C, A> M;
88 V ar1[] = {1, 2, 3, 4};
89 V ar2[] = {5, 6, 7, 8, 9, 10, 11, 12};
90 M m1(ar1, ar1 + sizeof(ar1) / sizeof(ar1[0]), C(1), A(1));
91 M m2(ar2, ar2 + sizeof(ar2) / sizeof(ar2[0]), C(2), A(2));
92 M m1_save = m1;
93 M m2_save = m2;
94 swap(x&: m1, y&: m2);
95 assert(m1 == m2_save);
96 assert(m2 == m1_save);
97 assert(m1.key_comp() == C(2));
98 assert(m1.get_allocator() == A(2));
99 assert(m2.key_comp() == C(1));
100 assert(m2.get_allocator() == A(1));
101 }
102
103 return 0;
104}
105

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