brintos

brintos / llvm-project-archived public Read only

0
0
Text · 9.1 KiB · f276467 Raw
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