summaryrefslogtreecommitdiff
path: root/libstdc++-v3/testsuite/23_containers/multiset/modifiers/insert/22102.cc
blob: 45f524a7e3f3c736eebf4319315c987590db0523 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
// 2006-01-07  Paolo Carlini  <pcarlini@suse.de>

// Copyright (C) 2006-2019 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library.  This library is free
// software; you can redistribute it and/or modify it under the
// terms of the GNU General Public License as published by the
// Free Software Foundation; either version 3, or (at your option)
// any later version.

// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.

// You should have received a copy of the GNU General Public License along
// with this library; see the file COPYING3.  If not see
// <http://www.gnu.org/licenses/>.

// 23.3.4  Class template multiset

#include <set>
#include <testsuite_hooks.h>

// libstdc++/22102
void test01()
{
  typedef std::multiset<int>        Mset;
  typedef Mset::value_type          value_type;
  typedef Mset::iterator            iterator;
  
  Mset ms1;
  
  const iterator it1 = ms1.insert(value_type(0));
  const iterator it2 = ms1.insert(value_type(1));  
  const iterator it3 = ms1.insert(value_type(2));

  const value_type vt1(2);
  const iterator it4 = ms1.insert(it1, vt1);
  iterator it5 = it4;
  iterator it6 = it4;
  VERIFY( ms1.size() == 4 );
  VERIFY( *it4 == vt1 );
  VERIFY( ++it5 == it3 );
  VERIFY( --it6 == it2 );
  VERIFY( *it5 == *it3 );
  VERIFY( *it6 == *it2 );

  const value_type vt2(2);
  const iterator it7 = ms1.insert(ms1.begin(), vt2);
  iterator it8 = it7;
  iterator it9 = it7;
  VERIFY( ms1.size() == 5 );
  VERIFY( *it7 == vt2 );
  VERIFY( ++it8 == it4 );
  VERIFY( --it9 == it2 );
  VERIFY( *it8 == *it4 );
  VERIFY( *it9 == *it2 );

  const value_type vt3(2);
  const iterator it10 = ms1.insert(it1, vt3);
  iterator it11 = it10;
  iterator it12 = it10;
  VERIFY( ms1.size() == 6 );
  VERIFY( *it10 == vt3 );
  VERIFY( ++it11 == it7 );
  VERIFY( --it12 == it2 );
  VERIFY( *it11 == *it7 );
  VERIFY( *it12 == *it2 );

  const value_type vt4(0);
  const iterator it13 = ms1.insert(it10, vt4);
  iterator it14 = it13;
  iterator it15 = it13;
  VERIFY( ms1.size() == 7 );
  VERIFY( *it13 == vt4 );
  VERIFY( ++it14 == it2 );
  VERIFY( --it15 == it1 );
  VERIFY( *it14 == *it2 );
  VERIFY( *it15 == *it1 );

  const value_type vt5(1);
  const iterator it16 = ms1.insert(it13, vt5);
  iterator it17 = it16;
  iterator it18 = it16;
  VERIFY( ms1.size() == 8 );
  VERIFY( *it16 == vt5 );
  VERIFY( ++it17 == it2 );
  VERIFY( --it18 == it13 );
  VERIFY( *it17 == *it2 );
  VERIFY( *it18 == *it13 );

  const value_type vt6(0);
  const iterator it19 = ms1.insert(it1, vt6);
  iterator it20 = it19;
  VERIFY( ms1.size() == 9 );
  VERIFY( *it19 == vt6 );
  VERIFY( it19 == ms1.begin() );
  VERIFY( ++it20 == it1 );
  VERIFY( *it20 == *it1 );

  const value_type vt7(3);
  const iterator it21 = ms1.insert(it19, vt7);
  iterator it22 = it21;
  iterator it23 = it21;
  VERIFY( ms1.size() == 10 );
  VERIFY( *it21 == vt7 );
  VERIFY( ++it22 == ms1.end() );
  VERIFY( --it23 == it3 );
  VERIFY( *it23 == *it3 );

  const value_type vt8(2);
  const iterator it24 = ms1.insert(ms1.end(), vt8);
  iterator it25 = it24;
  iterator it26 = it24;
  VERIFY( ms1.size() == 11 );
  VERIFY( *it24 == vt8 );
  VERIFY( ++it25 == it21 );
  VERIFY( --it26 == it3 );
  VERIFY( *it25 == *it21 );
  VERIFY( *it26 == *it3 );   
    
  const value_type vt9(3);
  const iterator it27 = ms1.insert(it3, vt9);
  iterator it28 = it27;
  iterator it29 = it27;
  VERIFY( ms1.size() == 12 );
  VERIFY( *it27 == vt9 );
  VERIFY( ++it28 == it21 );
  VERIFY( --it29 == it24 );
  VERIFY( *it28 == *it21 );
  VERIFY( *it29 == *it24 ); 
}

int main()
{
  test01();
  return 0;
}