erase_iter.pass.cpp revision b64f8b07c104c6cc986570ac8ee0ed16a9f23976
1//===----------------------------------------------------------------------===// 2// 3// The LLVM Compiler Infrastructure 4// 5// This file is dual licensed under the MIT and the University of Illinois Open 6// Source Licenses. See LICENSE.TXT for details. 7// 8//===----------------------------------------------------------------------===// 9 10// <map> 11 12// class map 13 14// iterator erase(const_iterator position); 15 16#include <map> 17#include <cassert> 18 19int main() 20{ 21 { 22 typedef std::map<int, double> M; 23 typedef std::pair<int, double> P; 24 typedef M::iterator I; 25 P ar[] = 26 { 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 I i = m.erase(next(m.cbegin(), 3)); 39 assert(m.size() == 7); 40 assert(i == next(m.begin(), 3)); 41 assert(m.begin()->first == 1); 42 assert(m.begin()->second == 1.5); 43 assert(next(m.begin())->first == 2); 44 assert(next(m.begin())->second == 2.5); 45 assert(next(m.begin(), 2)->first == 3); 46 assert(next(m.begin(), 2)->second == 3.5); 47 assert(next(m.begin(), 3)->first == 5); 48 assert(next(m.begin(), 3)->second == 5.5); 49 assert(next(m.begin(), 4)->first == 6); 50 assert(next(m.begin(), 4)->second == 6.5); 51 assert(next(m.begin(), 5)->first == 7); 52 assert(next(m.begin(), 5)->second == 7.5); 53 assert(next(m.begin(), 6)->first == 8); 54 assert(next(m.begin(), 6)->second == 8.5); 55 56 i = m.erase(next(m.cbegin(), 0)); 57 assert(m.size() == 6); 58 assert(i == m.begin()); 59 assert(m.begin()->first == 2); 60 assert(m.begin()->second == 2.5); 61 assert(next(m.begin())->first == 3); 62 assert(next(m.begin())->second == 3.5); 63 assert(next(m.begin(), 2)->first == 5); 64 assert(next(m.begin(), 2)->second == 5.5); 65 assert(next(m.begin(), 3)->first == 6); 66 assert(next(m.begin(), 3)->second == 6.5); 67 assert(next(m.begin(), 4)->first == 7); 68 assert(next(m.begin(), 4)->second == 7.5); 69 assert(next(m.begin(), 5)->first == 8); 70 assert(next(m.begin(), 5)->second == 8.5); 71 72 i = m.erase(next(m.cbegin(), 5)); 73 assert(m.size() == 5); 74 assert(i == m.end()); 75 assert(m.begin()->first == 2); 76 assert(m.begin()->second == 2.5); 77 assert(next(m.begin())->first == 3); 78 assert(next(m.begin())->second == 3.5); 79 assert(next(m.begin(), 2)->first == 5); 80 assert(next(m.begin(), 2)->second == 5.5); 81 assert(next(m.begin(), 3)->first == 6); 82 assert(next(m.begin(), 3)->second == 6.5); 83 assert(next(m.begin(), 4)->first == 7); 84 assert(next(m.begin(), 4)->second == 7.5); 85 86 i = m.erase(next(m.cbegin(), 1)); 87 assert(m.size() == 4); 88 assert(i == next(m.begin())); 89 assert(m.begin()->first == 2); 90 assert(m.begin()->second == 2.5); 91 assert(next(m.begin())->first == 5); 92 assert(next(m.begin())->second == 5.5); 93 assert(next(m.begin(), 2)->first == 6); 94 assert(next(m.begin(), 2)->second == 6.5); 95 assert(next(m.begin(), 3)->first == 7); 96 assert(next(m.begin(), 3)->second == 7.5); 97 98 i = m.erase(next(m.cbegin(), 2)); 99 assert(m.size() == 3); 100 assert(i == next(m.begin(), 2)); 101 assert(m.begin()->first == 2); 102 assert(m.begin()->second == 2.5); 103 assert(next(m.begin())->first == 5); 104 assert(next(m.begin())->second == 5.5); 105 assert(next(m.begin(), 2)->first == 7); 106 assert(next(m.begin(), 2)->second == 7.5); 107 108 i = m.erase(next(m.cbegin(), 2)); 109 assert(m.size() == 2); 110 assert(i == next(m.begin(), 2)); 111 assert(m.begin()->first == 2); 112 assert(m.begin()->second == 2.5); 113 assert(next(m.begin())->first == 5); 114 assert(next(m.begin())->second == 5.5); 115 116 i = m.erase(next(m.cbegin(), 0)); 117 assert(m.size() == 1); 118 assert(i == next(m.begin(), 0)); 119 assert(m.begin()->first == 5); 120 assert(m.begin()->second == 5.5); 121 122 i = m.erase(m.cbegin()); 123 assert(m.size() == 0); 124 assert(i == m.begin()); 125 assert(i == m.end()); 126 } 127} 128