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// <map>
10
11// class multimap
12
13// void swap(multimap& m);
14
15#include <map>
16#include <cassert>
17
18#include "test_macros.h"
19#include "min_allocator.h"
20
21int main(int, char**) {
22 typedef std::pair<const int, double> V;
23 {
24 typedef std::multimap<int, double> 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[] = {V(5, 5), V(6, 6), V(7, 7), V(8, 8), V(9, 9), V(10, 10), V(11, 11), V(12, 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[] = {V(1, 1), V(2, 2), V(3, 3), V(4, 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[] = {V(1, 1), V(2, 2), V(3, 3), V(4, 4)};
56 V ar2[] = {V(5, 5), V(6, 6), V(7, 7), V(8, 8), V(9, 9), V(10, 10), V(11, 11), V(12, 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 std::multimap<int, double, std::less<int>, min_allocator<std::pair<const int, double>>> M;
69 {
70 M m1;
71 M m2;
72 M m1_save = m1;
73 M m2_save = m2;
74 m1.swap(m2);
75 assert(m1 == m2_save);
76 assert(m2 == m1_save);
77 }
78 {
79 V ar2[] = {V(5, 5), V(6, 6), V(7, 7), V(8, 8), V(9, 9), V(10, 10), V(11, 11), V(12, 12)};
80 M m1;
81 M m2(ar2, ar2 + sizeof(ar2) / sizeof(ar2[0]));
82 M m1_save = m1;
83 M m2_save = m2;
84 m1.swap(m2);
85 assert(m1 == m2_save);
86 assert(m2 == m1_save);
87 }
88 {
89 V ar1[] = {V(1, 1), V(2, 2), V(3, 3), V(4, 4)};
90 M m1(ar1, ar1 + sizeof(ar1) / sizeof(ar1[0]));
91 M m2;
92 M m1_save = m1;
93 M m2_save = m2;
94 m1.swap(m2);
95 assert(m1 == m2_save);
96 assert(m2 == m1_save);
97 }
98 {
99 V ar1[] = {V(1, 1), V(2, 2), V(3, 3), V(4, 4)};
100 V ar2[] = {V(5, 5), V(6, 6), V(7, 7), V(8, 8), V(9, 9), V(10, 10), V(11, 11), V(12, 12)};
101 M m1(ar1, ar1 + sizeof(ar1) / sizeof(ar1[0]));
102 M m2(ar2, ar2 + sizeof(ar2) / sizeof(ar2[0]));
103 M m1_save = m1;
104 M m2_save = m2;
105 m1.swap(m2);
106 assert(m1 == m2_save);
107 assert(m2 == m1_save);
108 }
109 }
110#endif
111
112 return 0;
113}
114

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