1// 2006-01-07 Paolo Carlini <pcarlini@suse.de> 2 3// Copyright (C) 2006, 2009 Free Software Foundation, Inc. 4// 5// This file is part of the GNU ISO C++ Library. This library is free 6// software; you can redistribute it and/or modify it under the 7// terms of the GNU General Public License as published by the 8// Free Software Foundation; either version 3, or (at your option) 9// any later version. 10 11// This library is distributed in the hope that it will be useful, 12// but WITHOUT ANY WARRANTY; without even the implied warranty of 13// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14// GNU General Public License for more details. 15 16// You should have received a copy of the GNU General Public License along 17// with this library; see the file COPYING3. If not see 18// <http://www.gnu.org/licenses/>. 19 20// 23.3.2 Class template multimap 21 22#include <map> 23#include <testsuite_hooks.h> 24 25// libstdc++/22102 26void test01() 27{ 28 bool test __attribute__((unused)) = true; 29 typedef std::multimap<int, int> Mmap; 30 typedef Mmap::value_type value_type; 31 typedef Mmap::iterator iterator; 32 33 Mmap mm1; 34 35 const iterator it1 = mm1.insert(value_type(0, 0)); 36 const iterator it2 = mm1.insert(value_type(1, 1)); 37 const iterator it3 = mm1.insert(value_type(2, 2)); 38 39 const value_type vt1(2, 1); 40 const iterator it4 = mm1.insert(it1, vt1); 41 iterator it5 = it4; 42 iterator it6 = it4; 43 VERIFY( mm1.size() == 4 ); 44 VERIFY( *it4 == vt1 ); 45 VERIFY( ++it5 == it3 ); 46 VERIFY( --it6 == it2 ); 47 VERIFY( *it5 == *it3 ); 48 VERIFY( *it6 == *it2 ); 49 50 const value_type vt2(2, 0); 51 const iterator it7 = mm1.insert(mm1.begin(), vt2); 52 iterator it8 = it7; 53 iterator it9 = it7; 54 VERIFY( mm1.size() == 5 ); 55 VERIFY( *it7 == vt2 ); 56 VERIFY( ++it8 == it4 ); 57 VERIFY( --it9 == it2 ); 58 VERIFY( *it8 == *it4 ); 59 VERIFY( *it9 == *it2 ); 60 61 const value_type vt3(2, -1); 62 const iterator it10 = mm1.insert(it1, vt3); 63 iterator it11 = it10; 64 iterator it12 = it10; 65 VERIFY( mm1.size() == 6 ); 66 VERIFY( *it10 == vt3 ); 67 VERIFY( ++it11 == it7 ); 68 VERIFY( --it12 == it2 ); 69 VERIFY( *it11 == *it7 ); 70 VERIFY( *it12 == *it2 ); 71 72 const value_type vt4(0, 1); 73 const iterator it13 = mm1.insert(it10, vt4); 74 iterator it14 = it13; 75 iterator it15 = it13; 76 VERIFY( mm1.size() == 7 ); 77 VERIFY( *it13 == vt4 ); 78 VERIFY( ++it14 == it2 ); 79 VERIFY( --it15 == it1 ); 80 VERIFY( *it14 == *it2 ); 81 VERIFY( *it15 == *it1 ); 82 83 const value_type vt5(1, 0); 84 const iterator it16 = mm1.insert(it13, vt5); 85 iterator it17 = it16; 86 iterator it18 = it16; 87 VERIFY( mm1.size() == 8 ); 88 VERIFY( *it16 == vt5 ); 89 VERIFY( ++it17 == it2 ); 90 VERIFY( --it18 == it13 ); 91 VERIFY( *it17 == *it2 ); 92 VERIFY( *it18 == *it13 ); 93 94 const value_type vt6(0, -1); 95 const iterator it19 = mm1.insert(it1, vt6); 96 iterator it20 = it19; 97 VERIFY( mm1.size() == 9 ); 98 VERIFY( *it19 == vt6 ); 99 VERIFY( it19 == mm1.begin() ); 100 VERIFY( ++it20 == it1 ); 101 VERIFY( *it20 == *it1 ); 102 103 const value_type vt7(3, 3); 104 const iterator it21 = mm1.insert(it19, vt7); 105 iterator it22 = it21; 106 iterator it23 = it21; 107 VERIFY( mm1.size() == 10 ); 108 VERIFY( *it21 == vt7 ); 109 VERIFY( ++it22 == mm1.end() ); 110 VERIFY( --it23 == it3 ); 111 VERIFY( *it23 == *it3 ); 112 113 const value_type vt8(2, 3); 114 const iterator it24 = mm1.insert(mm1.end(), vt8); 115 iterator it25 = it24; 116 iterator it26 = it24; 117 VERIFY( mm1.size() == 11 ); 118 VERIFY( *it24 == vt8 ); 119 VERIFY( ++it25 == it21 ); 120 VERIFY( --it26 == it3 ); 121 VERIFY( *it25 == *it21 ); 122 VERIFY( *it26 == *it3 ); 123 124 const value_type vt9(3, 2); 125 const iterator it27 = mm1.insert(it3, vt9); 126 iterator it28 = it27; 127 iterator it29 = it27; 128 VERIFY( mm1.size() == 12 ); 129 VERIFY( *it27 == vt9 ); 130 VERIFY( ++it28 == it21 ); 131 VERIFY( --it29 == it24 ); 132 VERIFY( *it28 == *it21 ); 133 VERIFY( *it29 == *it24 ); 134} 135 136int main() 137{ 138 test01(); 139 return 0; 140} 141