275 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// size_type erase(const key_type& k);14 15#include <map>16#include <cassert>17 18#include "test_macros.h"19#include "min_allocator.h"20 21int main(int, char**) {22 {23 typedef std::map<int, double> M;24 typedef std::pair<int, double> P;25 typedef M::size_type R;26 P ar[] = {27 P(1, 1.5),28 P(2, 2.5),29 P(3, 3.5),30 P(4, 4.5),31 P(5, 5.5),32 P(6, 6.5),33 P(7, 7.5),34 P(8, 8.5),35 };36 M m(ar, ar + sizeof(ar) / sizeof(ar[0]));37 assert(m.size() == 8);38 R s = m.erase(9);39 assert(s == 0);40 assert(m.size() == 8);41 assert(m.begin()->first == 1);42 assert(m.begin()->second == 1.5);43 assert(std::next(m.begin())->first == 2);44 assert(std::next(m.begin())->second == 2.5);45 assert(std::next(m.begin(), 2)->first == 3);46 assert(std::next(m.begin(), 2)->second == 3.5);47 assert(std::next(m.begin(), 3)->first == 4);48 assert(std::next(m.begin(), 3)->second == 4.5);49 assert(std::next(m.begin(), 4)->first == 5);50 assert(std::next(m.begin(), 4)->second == 5.5);51 assert(std::next(m.begin(), 5)->first == 6);52 assert(std::next(m.begin(), 5)->second == 6.5);53 assert(std::next(m.begin(), 6)->first == 7);54 assert(std::next(m.begin(), 6)->second == 7.5);55 assert(std::next(m.begin(), 7)->first == 8);56 assert(std::next(m.begin(), 7)->second == 8.5);57 58 s = m.erase(4);59 assert(m.size() == 7);60 assert(s == 1);61 assert(m.begin()->first == 1);62 assert(m.begin()->second == 1.5);63 assert(std::next(m.begin())->first == 2);64 assert(std::next(m.begin())->second == 2.5);65 assert(std::next(m.begin(), 2)->first == 3);66 assert(std::next(m.begin(), 2)->second == 3.5);67 assert(std::next(m.begin(), 3)->first == 5);68 assert(std::next(m.begin(), 3)->second == 5.5);69 assert(std::next(m.begin(), 4)->first == 6);70 assert(std::next(m.begin(), 4)->second == 6.5);71 assert(std::next(m.begin(), 5)->first == 7);72 assert(std::next(m.begin(), 5)->second == 7.5);73 assert(std::next(m.begin(), 6)->first == 8);74 assert(std::next(m.begin(), 6)->second == 8.5);75 76 s = m.erase(1);77 assert(m.size() == 6);78 assert(s == 1);79 assert(m.begin()->first == 2);80 assert(m.begin()->second == 2.5);81 assert(std::next(m.begin())->first == 3);82 assert(std::next(m.begin())->second == 3.5);83 assert(std::next(m.begin(), 2)->first == 5);84 assert(std::next(m.begin(), 2)->second == 5.5);85 assert(std::next(m.begin(), 3)->first == 6);86 assert(std::next(m.begin(), 3)->second == 6.5);87 assert(std::next(m.begin(), 4)->first == 7);88 assert(std::next(m.begin(), 4)->second == 7.5);89 assert(std::next(m.begin(), 5)->first == 8);90 assert(std::next(m.begin(), 5)->second == 8.5);91 92 s = m.erase(8);93 assert(m.size() == 5);94 assert(s == 1);95 assert(m.begin()->first == 2);96 assert(m.begin()->second == 2.5);97 assert(std::next(m.begin())->first == 3);98 assert(std::next(m.begin())->second == 3.5);99 assert(std::next(m.begin(), 2)->first == 5);100 assert(std::next(m.begin(), 2)->second == 5.5);101 assert(std::next(m.begin(), 3)->first == 6);102 assert(std::next(m.begin(), 3)->second == 6.5);103 assert(std::next(m.begin(), 4)->first == 7);104 assert(std::next(m.begin(), 4)->second == 7.5);105 106 s = m.erase(3);107 assert(m.size() == 4);108 assert(s == 1);109 assert(m.begin()->first == 2);110 assert(m.begin()->second == 2.5);111 assert(std::next(m.begin())->first == 5);112 assert(std::next(m.begin())->second == 5.5);113 assert(std::next(m.begin(), 2)->first == 6);114 assert(std::next(m.begin(), 2)->second == 6.5);115 assert(std::next(m.begin(), 3)->first == 7);116 assert(std::next(m.begin(), 3)->second == 7.5);117 118 s = m.erase(6);119 assert(m.size() == 3);120 assert(s == 1);121 assert(m.begin()->first == 2);122 assert(m.begin()->second == 2.5);123 assert(std::next(m.begin())->first == 5);124 assert(std::next(m.begin())->second == 5.5);125 assert(std::next(m.begin(), 2)->first == 7);126 assert(std::next(m.begin(), 2)->second == 7.5);127 128 s = m.erase(7);129 assert(m.size() == 2);130 assert(s == 1);131 assert(m.begin()->first == 2);132 assert(m.begin()->second == 2.5);133 assert(std::next(m.begin())->first == 5);134 assert(std::next(m.begin())->second == 5.5);135 136 s = m.erase(2);137 assert(m.size() == 1);138 assert(s == 1);139 assert(m.begin()->first == 5);140 assert(m.begin()->second == 5.5);141 142 s = m.erase(5);143 assert(m.size() == 0);144 assert(s == 1);145 }146#if TEST_STD_VER >= 11147 {148 typedef std::map<int, double, std::less<int>, min_allocator<std::pair<const int, double>>> M;149 typedef std::pair<int, double> P;150 typedef M::size_type R;151 P ar[] = {152 P(1, 1.5),153 P(2, 2.5),154 P(3, 3.5),155 P(4, 4.5),156 P(5, 5.5),157 P(6, 6.5),158 P(7, 7.5),159 P(8, 8.5),160 };161 M m(ar, ar + sizeof(ar) / sizeof(ar[0]));162 assert(m.size() == 8);163 R s = m.erase(9);164 assert(s == 0);165 assert(m.size() == 8);166 assert(m.begin()->first == 1);167 assert(m.begin()->second == 1.5);168 assert(std::next(m.begin())->first == 2);169 assert(std::next(m.begin())->second == 2.5);170 assert(std::next(m.begin(), 2)->first == 3);171 assert(std::next(m.begin(), 2)->second == 3.5);172 assert(std::next(m.begin(), 3)->first == 4);173 assert(std::next(m.begin(), 3)->second == 4.5);174 assert(std::next(m.begin(), 4)->first == 5);175 assert(std::next(m.begin(), 4)->second == 5.5);176 assert(std::next(m.begin(), 5)->first == 6);177 assert(std::next(m.begin(), 5)->second == 6.5);178 assert(std::next(m.begin(), 6)->first == 7);179 assert(std::next(m.begin(), 6)->second == 7.5);180 assert(std::next(m.begin(), 7)->first == 8);181 assert(std::next(m.begin(), 7)->second == 8.5);182 183 s = m.erase(4);184 assert(m.size() == 7);185 assert(s == 1);186 assert(m.begin()->first == 1);187 assert(m.begin()->second == 1.5);188 assert(std::next(m.begin())->first == 2);189 assert(std::next(m.begin())->second == 2.5);190 assert(std::next(m.begin(), 2)->first == 3);191 assert(std::next(m.begin(), 2)->second == 3.5);192 assert(std::next(m.begin(), 3)->first == 5);193 assert(std::next(m.begin(), 3)->second == 5.5);194 assert(std::next(m.begin(), 4)->first == 6);195 assert(std::next(m.begin(), 4)->second == 6.5);196 assert(std::next(m.begin(), 5)->first == 7);197 assert(std::next(m.begin(), 5)->second == 7.5);198 assert(std::next(m.begin(), 6)->first == 8);199 assert(std::next(m.begin(), 6)->second == 8.5);200 201 s = m.erase(1);202 assert(m.size() == 6);203 assert(s == 1);204 assert(m.begin()->first == 2);205 assert(m.begin()->second == 2.5);206 assert(std::next(m.begin())->first == 3);207 assert(std::next(m.begin())->second == 3.5);208 assert(std::next(m.begin(), 2)->first == 5);209 assert(std::next(m.begin(), 2)->second == 5.5);210 assert(std::next(m.begin(), 3)->first == 6);211 assert(std::next(m.begin(), 3)->second == 6.5);212 assert(std::next(m.begin(), 4)->first == 7);213 assert(std::next(m.begin(), 4)->second == 7.5);214 assert(std::next(m.begin(), 5)->first == 8);215 assert(std::next(m.begin(), 5)->second == 8.5);216 217 s = m.erase(8);218 assert(m.size() == 5);219 assert(s == 1);220 assert(m.begin()->first == 2);221 assert(m.begin()->second == 2.5);222 assert(std::next(m.begin())->first == 3);223 assert(std::next(m.begin())->second == 3.5);224 assert(std::next(m.begin(), 2)->first == 5);225 assert(std::next(m.begin(), 2)->second == 5.5);226 assert(std::next(m.begin(), 3)->first == 6);227 assert(std::next(m.begin(), 3)->second == 6.5);228 assert(std::next(m.begin(), 4)->first == 7);229 assert(std::next(m.begin(), 4)->second == 7.5);230 231 s = m.erase(3);232 assert(m.size() == 4);233 assert(s == 1);234 assert(m.begin()->first == 2);235 assert(m.begin()->second == 2.5);236 assert(std::next(m.begin())->first == 5);237 assert(std::next(m.begin())->second == 5.5);238 assert(std::next(m.begin(), 2)->first == 6);239 assert(std::next(m.begin(), 2)->second == 6.5);240 assert(std::next(m.begin(), 3)->first == 7);241 assert(std::next(m.begin(), 3)->second == 7.5);242 243 s = m.erase(6);244 assert(m.size() == 3);245 assert(s == 1);246 assert(m.begin()->first == 2);247 assert(m.begin()->second == 2.5);248 assert(std::next(m.begin())->first == 5);249 assert(std::next(m.begin())->second == 5.5);250 assert(std::next(m.begin(), 2)->first == 7);251 assert(std::next(m.begin(), 2)->second == 7.5);252 253 s = m.erase(7);254 assert(m.size() == 2);255 assert(s == 1);256 assert(m.begin()->first == 2);257 assert(m.begin()->second == 2.5);258 assert(std::next(m.begin())->first == 5);259 assert(std::next(m.begin())->second == 5.5);260 261 s = m.erase(2);262 assert(m.size() == 1);263 assert(s == 1);264 assert(m.begin()->first == 5);265 assert(m.begin()->second == 5.5);266 267 s = m.erase(5);268 assert(m.size() == 0);269 assert(s == 1);270 }271#endif272 273 return 0;274}275