171 lines · cpp
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-exception6//7//===----------------------------------------------------------------------===//8 9// <map>10 11// class map12 13// template <class Key, class T, class Compare, class Allocator>14// void15// swap(map<Key, T, Compare, Allocator>& x, map<Key, T, Compare, Allocator>& y);16 17#include <map>18#include <cassert>19#include "test_macros.h"20#include "test_allocator.h"21#include "../../../test_compare.h"22#include "min_allocator.h"23 24int main(int, char**) {25 typedef std::pair<const int, double> V;26 {27 typedef std::map<int, double> M;28 {29 M m1;30 M m2;31 M m1_save = m1;32 M m2_save = m2;33 swap(m1, m2);34 assert(m1 == m2_save);35 assert(m2 == m1_save);36 }37 {38 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)};39 M m1;40 M m2(ar2, ar2 + sizeof(ar2) / sizeof(ar2[0]));41 M m1_save = m1;42 M m2_save = m2;43 swap(m1, m2);44 assert(m1 == m2_save);45 assert(m2 == m1_save);46 }47 {48 V ar1[] = {V(1, 1), V(2, 2), V(3, 3), V(4, 4)};49 M m1(ar1, ar1 + sizeof(ar1) / sizeof(ar1[0]));50 M m2;51 M m1_save = m1;52 M m2_save = m2;53 swap(m1, m2);54 assert(m1 == m2_save);55 assert(m2 == m1_save);56 }57 {58 V ar1[] = {V(1, 1), V(2, 2), V(3, 3), V(4, 4)};59 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)};60 M m1(ar1, ar1 + sizeof(ar1) / sizeof(ar1[0]));61 M m2(ar2, ar2 + sizeof(ar2) / sizeof(ar2[0]));62 M m1_save = m1;63 M m2_save = m2;64 swap(m1, m2);65 assert(m1 == m2_save);66 assert(m2 == m1_save);67 }68 }69 {70 typedef test_allocator<V> A;71 typedef test_less<int> C;72 typedef std::map<int, double, C, A> M;73 V ar1[] = {V(1, 1), V(2, 2), V(3, 3), V(4, 4)};74 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)};75 M m1(ar1, ar1 + sizeof(ar1) / sizeof(ar1[0]), C(1), A(1, 1));76 M m2(ar2, ar2 + sizeof(ar2) / sizeof(ar2[0]), C(2), A(1, 2));77 M m1_save = m1;78 M m2_save = m2;79 swap(m1, m2);80 assert(m1 == m2_save);81 assert(m2 == m1_save);82 assert(m1.key_comp() == C(2));83 assert(m1.get_allocator().get_id() == 1); // not swapped84 assert(m2.key_comp() == C(1));85 assert(m2.get_allocator().get_id() == 2);86 }87 {88 typedef other_allocator<V> A;89 typedef test_less<int> C;90 typedef std::map<int, double, C, A> M;91 V ar1[] = {V(1, 1), V(2, 2), V(3, 3), V(4, 4)};92 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)};93 M m1(ar1, ar1 + sizeof(ar1) / sizeof(ar1[0]), C(1), A(1));94 M m2(ar2, ar2 + sizeof(ar2) / sizeof(ar2[0]), C(2), A(2));95 M m1_save = m1;96 M m2_save = m2;97 swap(m1, m2);98 assert(m1 == m2_save);99 assert(m2 == m1_save);100 assert(m1.key_comp() == C(2));101 assert(m1.get_allocator() == A(2));102 assert(m2.key_comp() == C(1));103 assert(m2.get_allocator() == A(1));104 }105#if TEST_STD_VER >= 11106 {107 typedef std::map<int, double, std::less<int>, min_allocator<V>> M;108 {109 M m1;110 M m2;111 M m1_save = m1;112 M m2_save = m2;113 swap(m1, m2);114 assert(m1 == m2_save);115 assert(m2 == m1_save);116 }117 {118 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)};119 M m1;120 M m2(ar2, ar2 + sizeof(ar2) / sizeof(ar2[0]));121 M m1_save = m1;122 M m2_save = m2;123 swap(m1, m2);124 assert(m1 == m2_save);125 assert(m2 == m1_save);126 }127 {128 V ar1[] = {V(1, 1), V(2, 2), V(3, 3), V(4, 4)};129 M m1(ar1, ar1 + sizeof(ar1) / sizeof(ar1[0]));130 M m2;131 M m1_save = m1;132 M m2_save = m2;133 swap(m1, m2);134 assert(m1 == m2_save);135 assert(m2 == m1_save);136 }137 {138 V ar1[] = {V(1, 1), V(2, 2), V(3, 3), V(4, 4)};139 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)};140 M m1(ar1, ar1 + sizeof(ar1) / sizeof(ar1[0]));141 M m2(ar2, ar2 + sizeof(ar2) / sizeof(ar2[0]));142 M m1_save = m1;143 M m2_save = m2;144 swap(m1, m2);145 assert(m1 == m2_save);146 assert(m2 == m1_save);147 }148 }149 {150 typedef min_allocator<V> A;151 typedef test_less<int> C;152 typedef std::map<int, double, C, A> M;153 V ar1[] = {V(1, 1), V(2, 2), V(3, 3), V(4, 4)};154 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)};155 M m1(ar1, ar1 + sizeof(ar1) / sizeof(ar1[0]), C(1), A());156 M m2(ar2, ar2 + sizeof(ar2) / sizeof(ar2[0]), C(2), A());157 M m1_save = m1;158 M m2_save = m2;159 swap(m1, m2);160 assert(m1 == m2_save);161 assert(m2 == m1_save);162 assert(m1.key_comp() == C(2));163 assert(m1.get_allocator() == A());164 assert(m2.key_comp() == C(1));165 assert(m2.get_allocator() == A());166 }167#endif168 169 return 0;170}171