brintos

brintos / llvm-project-archived public Read only

0
0
Text · 5.0 KiB · ba390ac Raw
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