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 map 12 13 // iterator erase(const_iterator first, const_iterator last); 14 15 #include <map> 16 #include <cassert> 17 18 #include "min_allocator.h" 19 20 int main(int, char**) 21 { 22 { 23 typedef std::map<int, double> M; 24 typedef std::pair<int, double> P; 25 typedef M::iterator I; 26 P ar[] = 27 { 28 P(1, 1.5), 29 P(2, 2.5), 30 P(3, 3.5), 31 P(4, 4.5), 32 P(5, 5.5), 33 P(6, 6.5), 34 P(7, 7.5), 35 P(8, 8.5), 36 }; 37 M m(ar, ar + sizeof(ar)/sizeof(ar[0])); 38 assert(m.size() == 8); 39 I i = m.erase(m.cbegin(), m.cbegin()); 40 assert(m.size() == 8); 41 assert(i == m.begin()); 42 assert(m.begin()->first == 1); 43 assert(m.begin()->second == 1.5); 44 assert(next(m.begin())->first == 2); 45 assert(next(m.begin())->second == 2.5); 46 assert(next(m.begin(), 2)->first == 3); 47 assert(next(m.begin(), 2)->second == 3.5); 48 assert(next(m.begin(), 3)->first == 4); 49 assert(next(m.begin(), 3)->second == 4.5); 50 assert(next(m.begin(), 4)->first == 5); 51 assert(next(m.begin(), 4)->second == 5.5); 52 assert(next(m.begin(), 5)->first == 6); 53 assert(next(m.begin(), 5)->second == 6.5); 54 assert(next(m.begin(), 6)->first == 7); 55 assert(next(m.begin(), 6)->second == 7.5); 56 assert(next(m.begin(), 7)->first == 8); 57 assert(next(m.begin(), 7)->second == 8.5); 58 59 i = m.erase(m.cbegin(), next(m.cbegin(), 2)); 60 assert(m.size() == 6); 61 assert(i == m.begin()); 62 assert(next(m.begin(), 0)->first == 3); 63 assert(next(m.begin(), 0)->second == 3.5); 64 assert(next(m.begin(), 1)->first == 4); 65 assert(next(m.begin(), 1)->second == 4.5); 66 assert(next(m.begin(), 2)->first == 5); 67 assert(next(m.begin(), 2)->second == 5.5); 68 assert(next(m.begin(), 3)->first == 6); 69 assert(next(m.begin(), 3)->second == 6.5); 70 assert(next(m.begin(), 4)->first == 7); 71 assert(next(m.begin(), 4)->second == 7.5); 72 assert(next(m.begin(), 5)->first == 8); 73 assert(next(m.begin(), 5)->second == 8.5); 74 75 i = m.erase(next(m.cbegin(), 2), next(m.cbegin(), 6)); 76 assert(m.size() == 2); 77 assert(i == next(m.begin(), 2)); 78 assert(next(m.begin(), 0)->first == 3); 79 assert(next(m.begin(), 0)->second == 3.5); 80 assert(next(m.begin(), 1)->first == 4); 81 assert(next(m.begin(), 1)->second == 4.5); 82 83 i = m.erase(m.cbegin(), m.cend()); 84 assert(m.size() == 0); 85 assert(i == m.begin()); 86 assert(i == m.end()); 87 } 88 #if TEST_STD_VER >= 11 89 { 90 typedef std::map<int, double, std::less<int>, min_allocator<std::pair<const int, double>>> M; 91 typedef std::pair<int, double> P; 92 typedef M::iterator I; 93 P ar[] = 94 { 95 P(1, 1.5), 96 P(2, 2.5), 97 P(3, 3.5), 98 P(4, 4.5), 99 P(5, 5.5), 100 P(6, 6.5), 101 P(7, 7.5), 102 P(8, 8.5), 103 }; 104 M m(ar, ar + sizeof(ar)/sizeof(ar[0])); 105 assert(m.size() == 8); 106 I i = m.erase(m.cbegin(), m.cbegin()); 107 assert(m.size() == 8); 108 assert(i == m.begin()); 109 assert(m.begin()->first == 1); 110 assert(m.begin()->second == 1.5); 111 assert(next(m.begin())->first == 2); 112 assert(next(m.begin())->second == 2.5); 113 assert(next(m.begin(), 2)->first == 3); 114 assert(next(m.begin(), 2)->second == 3.5); 115 assert(next(m.begin(), 3)->first == 4); 116 assert(next(m.begin(), 3)->second == 4.5); 117 assert(next(m.begin(), 4)->first == 5); 118 assert(next(m.begin(), 4)->second == 5.5); 119 assert(next(m.begin(), 5)->first == 6); 120 assert(next(m.begin(), 5)->second == 6.5); 121 assert(next(m.begin(), 6)->first == 7); 122 assert(next(m.begin(), 6)->second == 7.5); 123 assert(next(m.begin(), 7)->first == 8); 124 assert(next(m.begin(), 7)->second == 8.5); 125 126 i = m.erase(m.cbegin(), next(m.cbegin(), 2)); 127 assert(m.size() == 6); 128 assert(i == m.begin()); 129 assert(next(m.begin(), 0)->first == 3); 130 assert(next(m.begin(), 0)->second == 3.5); 131 assert(next(m.begin(), 1)->first == 4); 132 assert(next(m.begin(), 1)->second == 4.5); 133 assert(next(m.begin(), 2)->first == 5); 134 assert(next(m.begin(), 2)->second == 5.5); 135 assert(next(m.begin(), 3)->first == 6); 136 assert(next(m.begin(), 3)->second == 6.5); 137 assert(next(m.begin(), 4)->first == 7); 138 assert(next(m.begin(), 4)->second == 7.5); 139 assert(next(m.begin(), 5)->first == 8); 140 assert(next(m.begin(), 5)->second == 8.5); 141 142 i = m.erase(next(m.cbegin(), 2), next(m.cbegin(), 6)); 143 assert(m.size() == 2); 144 assert(i == next(m.begin(), 2)); 145 assert(next(m.begin(), 0)->first == 3); 146 assert(next(m.begin(), 0)->second == 3.5); 147 assert(next(m.begin(), 1)->first == 4); 148 assert(next(m.begin(), 1)->second == 4.5); 149 150 i = m.erase(m.cbegin(), m.cend()); 151 assert(m.size() == 0); 152 assert(i == m.begin()); 153 assert(i == m.end()); 154 } 155 #endif 156 157 return 0; 158 } 159