153 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 multimap12 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::multimap<int, double> M;24 typedef std::pair<int, double> P;25 typedef M::size_type I;26 P ar[] = {27 P(1, 1),28 P(1, 1.5),29 P(1, 2),30 P(2, 1),31 P(2, 1.5),32 P(2, 2),33 P(3, 1),34 P(3, 1.5),35 P(3, 2),36 };37 M m(ar, ar + sizeof(ar) / sizeof(ar[0]));38 assert(m.size() == 9);39 I i = m.erase(2);40 assert(m.size() == 6);41 assert(i == 3);42 assert(std::next(m.begin(), 0)->first == 1);43 assert(std::next(m.begin(), 0)->second == 1);44 assert(std::next(m.begin(), 1)->first == 1);45 assert(std::next(m.begin(), 1)->second == 1.5);46 assert(std::next(m.begin(), 2)->first == 1);47 assert(std::next(m.begin(), 2)->second == 2);48 assert(std::next(m.begin(), 3)->first == 3);49 assert(std::next(m.begin(), 3)->second == 1);50 assert(std::next(m.begin(), 4)->first == 3);51 assert(std::next(m.begin(), 4)->second == 1.5);52 assert(std::next(m.begin(), 5)->first == 3);53 assert(std::next(m.begin(), 5)->second == 2);54 55 i = m.erase(2);56 assert(m.size() == 6);57 assert(i == 0);58 assert(std::next(m.begin(), 0)->first == 1);59 assert(std::next(m.begin(), 0)->second == 1);60 assert(std::next(m.begin(), 1)->first == 1);61 assert(std::next(m.begin(), 1)->second == 1.5);62 assert(std::next(m.begin(), 2)->first == 1);63 assert(std::next(m.begin(), 2)->second == 2);64 assert(std::next(m.begin(), 3)->first == 3);65 assert(std::next(m.begin(), 3)->second == 1);66 assert(std::next(m.begin(), 4)->first == 3);67 assert(std::next(m.begin(), 4)->second == 1.5);68 assert(std::next(m.begin(), 5)->first == 3);69 assert(std::next(m.begin(), 5)->second == 2);70 71 i = m.erase(3);72 assert(i == 3);73 assert(m.size() == 3);74 assert(std::next(m.begin(), 0)->first == 1);75 assert(std::next(m.begin(), 0)->second == 1);76 assert(std::next(m.begin(), 1)->first == 1);77 assert(std::next(m.begin(), 1)->second == 1.5);78 assert(std::next(m.begin(), 2)->first == 1);79 assert(std::next(m.begin(), 2)->second == 2);80 81 i = m.erase(1);82 assert(m.size() == 0);83 assert(i == 3);84 }85#if TEST_STD_VER >= 1186 {87 typedef std::multimap<int, double, std::less<int>, min_allocator<std::pair<const int, double>>> M;88 typedef std::pair<int, double> P;89 typedef M::size_type I;90 P ar[] = {91 P(1, 1),92 P(1, 1.5),93 P(1, 2),94 P(2, 1),95 P(2, 1.5),96 P(2, 2),97 P(3, 1),98 P(3, 1.5),99 P(3, 2),100 };101 M m(ar, ar + sizeof(ar) / sizeof(ar[0]));102 assert(m.size() == 9);103 I i = m.erase(2);104 assert(m.size() == 6);105 assert(i == 3);106 assert(std::next(m.begin(), 0)->first == 1);107 assert(std::next(m.begin(), 0)->second == 1);108 assert(std::next(m.begin(), 1)->first == 1);109 assert(std::next(m.begin(), 1)->second == 1.5);110 assert(std::next(m.begin(), 2)->first == 1);111 assert(std::next(m.begin(), 2)->second == 2);112 assert(std::next(m.begin(), 3)->first == 3);113 assert(std::next(m.begin(), 3)->second == 1);114 assert(std::next(m.begin(), 4)->first == 3);115 assert(std::next(m.begin(), 4)->second == 1.5);116 assert(std::next(m.begin(), 5)->first == 3);117 assert(std::next(m.begin(), 5)->second == 2);118 119 i = m.erase(2);120 assert(m.size() == 6);121 assert(i == 0);122 assert(std::next(m.begin(), 0)->first == 1);123 assert(std::next(m.begin(), 0)->second == 1);124 assert(std::next(m.begin(), 1)->first == 1);125 assert(std::next(m.begin(), 1)->second == 1.5);126 assert(std::next(m.begin(), 2)->first == 1);127 assert(std::next(m.begin(), 2)->second == 2);128 assert(std::next(m.begin(), 3)->first == 3);129 assert(std::next(m.begin(), 3)->second == 1);130 assert(std::next(m.begin(), 4)->first == 3);131 assert(std::next(m.begin(), 4)->second == 1.5);132 assert(std::next(m.begin(), 5)->first == 3);133 assert(std::next(m.begin(), 5)->second == 2);134 135 i = m.erase(3);136 assert(i == 3);137 assert(m.size() == 3);138 assert(std::next(m.begin(), 0)->first == 1);139 assert(std::next(m.begin(), 0)->second == 1);140 assert(std::next(m.begin(), 1)->first == 1);141 assert(std::next(m.begin(), 1)->second == 1.5);142 assert(std::next(m.begin(), 2)->first == 1);143 assert(std::next(m.begin(), 2)->second == 2);144 145 i = m.erase(1);146 assert(m.size() == 0);147 assert(i == 3);148 }149#endif150 151 return 0;152}153