1 // 2005-11-25 Paolo Carlini <pcarlini@suse.de>
3 // Copyright (C) 2005-2025 Free Software Foundation, Inc.
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)
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.
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/>.
20 // 23.2.1.3 deque modifiers
23 #include <testsuite_hooks.h>
25 const int A
[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15};
26 const int A1
[] = {0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15};
27 const int A2
[] = {0, 2, 3, 4, 10, 11, 12, 13, 14, 15};
28 const int A3
[] = {0, 2, 3, 4, 10, 11};
29 const int A4
[] = {4, 10, 11};
30 const int A5
[] = {4, 10};
31 const unsigned N
= sizeof(A
) / sizeof(int);
32 const unsigned N1
= sizeof(A1
) / sizeof(int);
33 const unsigned N2
= sizeof(A2
) / sizeof(int);
34 const unsigned N3
= sizeof(A3
) / sizeof(int);
35 const unsigned N4
= sizeof(A4
) / sizeof(int);
36 const unsigned N5
= sizeof(A5
) / sizeof(int);
41 typedef std::deque
<int> deque_type
;
42 typedef deque_type::iterator iterator_type
;
44 deque_type
v(A
, A
+ N
);
46 iterator_type it1
= v
.erase(v
.begin() + 1);
47 VERIFY( it1
== v
.begin() + 1 );
48 VERIFY( v
.size() == N1
);
49 VERIFY( std::equal(v
.begin(), v
.end(), A1
) );
51 iterator_type it2
= v
.erase(v
.begin() + 4, v
.begin() + 9);
52 VERIFY( it2
== v
.begin() + 4 );
53 VERIFY( v
.size() == N2
);
54 VERIFY( std::equal(v
.begin(), v
.end(), A2
) );
56 iterator_type it3
= v
.erase(v
.begin() + 6, v
.end());
57 VERIFY( it3
== v
.begin() + 6 );
58 VERIFY( v
.size() == N3
);
59 VERIFY( std::equal(v
.begin(), v
.end(), A3
) );
61 iterator_type it4
= v
.erase(v
.begin(), v
.begin() + 3);
62 VERIFY( it4
== v
.begin() );
63 VERIFY( v
.size() == N4
);
64 VERIFY( std::equal(v
.begin(), v
.end(), A4
) );
66 iterator_type it5
= v
.erase(v
.begin() + 2);
67 VERIFY( it5
== v
.begin() + 2 );
68 VERIFY( v
.size() == N5
);
69 VERIFY( std::equal(v
.begin(), v
.end(), A5
) );
71 iterator_type it6
= v
.erase(v
.begin(), v
.end());
72 VERIFY( it6
== v
.begin() );
79 typedef std::deque
<std::deque
<int> > deque_type
;
80 typedef deque_type::iterator iterator_type
;
82 deque_type v
, v1
, v2
, v3
, v4
, v5
;
83 for (unsigned i
= 0; i
< N
; ++i
)
84 v
.push_back(std::deque
<int>(1, A
[i
]));
85 for (unsigned i
= 0; i
< N1
; ++i
)
86 v1
.push_back(std::deque
<int>(1, A1
[i
]));
87 for (unsigned i
= 0; i
< N2
; ++i
)
88 v2
.push_back(std::deque
<int>(1, A2
[i
]));
89 for (unsigned i
= 0; i
< N3
; ++i
)
90 v3
.push_back(std::deque
<int>(1, A3
[i
]));
91 for (unsigned i
= 0; i
< N4
; ++i
)
92 v4
.push_back(std::deque
<int>(1, A4
[i
]));
93 for (unsigned i
= 0; i
< N5
; ++i
)
94 v5
.push_back(std::deque
<int>(1, A5
[i
]));
96 iterator_type it1
= v
.erase(v
.begin() + 1);
97 VERIFY( it1
== v
.begin() + 1 );
98 VERIFY( v
.size() == N1
);
99 VERIFY( std::equal(v
.begin(), v
.end(), v1
.begin()) );
101 iterator_type it2
= v
.erase(v
.begin() + 4, v
.begin() + 9);
102 VERIFY( it2
== v
.begin() + 4 );
103 VERIFY( v
.size() == N2
);
104 VERIFY( std::equal(v
.begin(), v
.end(), v2
.begin()) );
106 iterator_type it3
= v
.erase(v
.begin() + 6, v
.end());
107 VERIFY( it3
== v
.begin() + 6 );
108 VERIFY( v
.size() == N3
);
109 VERIFY( std::equal(v
.begin(), v
.end(), v3
.begin()) );
111 iterator_type it4
= v
.erase(v
.begin(), v
.begin() + 3);
112 VERIFY( it4
== v
.begin() );
113 VERIFY( v
.size() == N4
);
114 VERIFY( std::equal(v
.begin(), v
.end(), v4
.begin()) );
116 iterator_type it5
= v
.erase(v
.begin() + 2);
117 VERIFY( it5
== v
.begin() + 2 );
118 VERIFY( v
.size() == N5
);
119 VERIFY( std::equal(v
.begin(), v
.end(), v5
.begin()) );
121 iterator_type it6
= v
.erase(v
.begin(), v
.end());
122 VERIFY( it6
== v
.begin() );