35#ifndef _RWSTD_NO_REPLACEABLE_NEW_DELETE
53inline IntDeque::size_type
76 typedef std::deque<T>
Deque;
77 typedef typename Deque::difference_type Difference;
78 typedef typename Deque::size_type
Size;
79 typedef typename Deque::value_type
Value;
80 typedef typename Deque::iterator
Iterator;
81 typedef typename Deque::const_iterator ConstIterator;
87 for (std::size_t
i = 0;
i !=
N; ++
i)
91 for (std::size_t
i = 0;
i !=
N; ++
i)
96 for (std::size_t
i = 0;
i !=
N; ++
i)
109 const Difference N_diff = Difference (
N);
111 for (std::size_t
i = 0;
i !=
N; ++
i, ++i0, --
i1) {
114 const Difference i_diff = Difference (
i);
119 "Expected iterator::operator*() value to be %d; got %d.",
123 "Expected value of iterator::operator[](%d) to be %d; "
124 "got %d.", N_diff - 2 * i_diff - 1,
Value (
N -
i),
125 i0 [N_diff - 2 * i_diff - 1]);
128 "Expected value of iterator::operator[](%d) to be %d; "
129 "got %d.", Difference (-1),
Value (
N -
i),
130 i1 [Difference (-1)]);
133 "Expected value of iterator::operator[](%d) to be %d; "
134 "got %d.", 2 * i_diff - N_diff,
Value (
i + 1),
135 i1 [2 * i_diff - N_diff]);
138 Difference d0_begin = i0 - begin;
139 Difference d1_begin =
i1 - begin;
140 Difference d0_end =
end - i0;
141 Difference d1_end =
end -
i1;
143 rw_assert (d0_begin == Difference (
i), 0, __LINE__,
144 "Expected value of operator-(deque::iterator, "
145 "deque::iterator) to be %d; got %d.",
146 Difference (
i), d0_begin);
148 rw_assert (d1_begin == N_diff - i_diff, 0, __LINE__,
149 "Expected value of operator-(deque::iterator, "
150 "deque::iterator) to be %d; got %d.",
151 N_diff - i_diff, d1_begin);
153 rw_assert (d0_end == N_diff - i_diff, 0, __LINE__,
154 "Expected value of operator-(deque::iterator, "
155 "deque::iterator) to be %d; got %d.",
156 N_diff - i_diff, d0_end);
158 rw_assert (d1_end == i_diff, 0, __LINE__,
159 "Expected value of operator-(deque::iterator, "
160 "deque::iterator) to be %d; got %d.",
167 const Iterator i_begin = begin + i_diff;
171 "Expected operator==(deque::iterator, "
172 "deque::iterator) to evaluate true.");
175 "Expected operator==(deque::iterator, "
176 "deque::iterator) to evaluate true.");
179 "Expected operator<(deque::iterator, "
180 "deque::iterator) to evaluate true.");
183 "Expected operator<(deque::iterator, "
184 "deque::iterator) to evaluate true.");
186 d0_begin = i_begin - begin;
187 d0_end =
end - i_end;
189 rw_assert (d0_begin == i_diff, 0, __LINE__,
190 "Expected operator==(deque::iterator, "
191 "deque::iterator) to evaluate true.");
193 rw_assert (d0_end == N_diff - i_diff, 0, __LINE__,
194 "Expected operator==(deque::iterator, "
195 "deque::iterator) to evaluate true.");
201 if (
i &&
i <
N - 1) {
204 "Expected ++iterator(it) == it + 1.");
207 "Expected it < ++iterator(it).");
210 "Expected !(++iterator (it) < it) to yield true.");
212 rw_assert (
i2 - i0 == Difference (+1), 0, __LINE__,
213 "Expected ++iterator(it) - it == 1.");
215 rw_assert (i0 -
i2 == Difference (-1), 0, __LINE__,
216 "Expected it - (++iterator(it)) == -1");
221 "Expected (++iterator(it) - 1) - it == 0.");
224 "Expected it - (++iterator(it) - 1) == 0.");
228 "Expected --iterator (it) == it - 1.");
230 "Expected --iterator (it) < it.");
232 "Expected !(it < --iterator (it)) to yield true.");
234 rw_assert (i3 - i0 == Difference (-1), 0, __LINE__,
235 "Expected (--iterator(it) - it) == -1.");
237 rw_assert (i0 - i3 == Difference (+1), 0, __LINE__,
238 "Expected (it - (--iterator(it))) == 1.");
243 "Expected --iterator (it) + 1 - it == 0.");
245 "Expected it - (--iterator (it) + 1) == 0.");
249 "Expected iterators to be equal.");
251 "Expected iterators to be equal.");
253 "Expected iterators to be equal.");
256 "Expected iterators to be equal.");
258 "Expected iterators to be equal.");
260 "Expected iterators to be equal.");
266#ifndef _RWSTD_NO_REPLACEABLE_NEW_DELETE
282 static int push_back_noted;
283 static int push_front_noted;
284 static int fill_noted;
289 rw_note (push_back_noted++, 0, 0,
"push_back test disabled");
294 rw_note (fill_noted++, 0, 0,
"fill test disabled");
299 rw_note (push_front_noted++, 0, 0,
"push_front test disabled");
308#ifdef _RWSTD_NO_DEBUG_ITER
313 const std::size_t itsize =
sizeof (IntDeque::iterator);
315 rw_assert (itsize == 2 *
sizeof (IntDeque::pointer), 0, __LINE__,
316 "sizeof(deque<int>::iterator) == %zu, got %zu "
317 "[space optimization]",
318 2 *
sizeof (IntDeque::pointer), itsize);
331 const IntDeque::size_type cap =
332 __rw::__rw_new_capacity (IntDeque::size_type (),
336 "__rw::__rw_new_capacity(std::deque<int>::"
337 "size_type, std::deque<int>*) = %zu", cap);
339 const std::size_t max_size =
i *
i * 10;
341 for (std::size_t
j = 0;
j != max_size; ++
j) {
343 if (
j % (max_size / 10) == 0)
344 rw_info (0, 0, 0,
"std::deque<int>(%u, ...)",
j);
355int main (
int argc,
char** argv)
357 return rw_test (argc, argv, __FILE__,
358 "lib.deque.iterators",
int run_test(int, char **)
void test_iterators(std::size_t N, int dir, T *)
std::deque< int > IntDeque
#define _RWSTD_SPECIALIZED_FUNCTION
std::deque< std::string, std::allocator< std::string > > Deque
_RWSTD_SPECIALIZED_FUNCTION IntDeque::size_type __rw_new_capacity< IntDeque >(IntDeque::size_type n, const IntDeque *)
std::deque< int, std::allocator< int > > IntDeque
_TEST_EXPORT int rw_test(int argc, char *argv[], const char *filename, const char *clause, const char *comment, int(*testfun)(int, char **), const char *optspec,...)
_TEST_EXPORT int rw_info(int, const char *, int, const char *,...)
_TEST_EXPORT int rw_note(int, const char *, int, const char *,...)
_TEST_EXPORT int rw_assert(int, const char *, int, const char *,...)