42#ifndef _RWSTD_NO_EXPLICIT_INSTANTIATION
90 const int tmp = (*i).data_.val_;
92 (*i).data_.val_ = (*j).data_.val_;
93 (*j).data_.val_ =
tmp;
101 const int tmp = (*i).data_.val_;
103 (*i).data_.val_ = (*j).data_.val_;
104 (*j).data_.val_ =
tmp;
113template <
class Iterator,
class T>
118 static const char*
const itname =
type_name (dummy, (
T*)0);
119 const char*
const fname =
"reverse";
122 const std::size_t
nsrc = std::strlen (src);
125 T*
const xsrc = T::from_char (src,
nsrc);
136 std::reverse (first,
last);
145 typedef unsigned char UChar;
147 success =
UChar (src [
i]) == xsrc [
nsrc -
i - 1].data_.val_;
153 "line %d: %s<%s>(\"%s\", ...) ==> "
154 "\"%{X=*.*}\"; unexpected element value %#c at offset %zu",
155 __LINE__, fname, itname, src,
156 int (
sizeof (*xsrc)),
int (
nsrc),
int (
i), xsrc,
157 xsrc [
nsrc -
i - 1].data_.val_,
i);
159 const std::size_t iter_swap_expect =
nsrc / 2;
162 "line %d: %s<%s>(\"%s\", ...); called iter_swap() "
163 "%zu times, %zu expected",
164 __LINE__, fname, itname, src,
173template <
class Iterator,
class OutputIterator,
class T>
179 static const char*
const itname =
type_name (it, (
T*)0);
180 const char*
const fname =
"reverse_copy";
182 const std::size_t
nsrc = std::strlen (src);
184 T*
const xsrc = T::from_char (src,
nsrc);
185 T*
const xdst = T::from_char (src,
nsrc);
192 std::size_t last_n_op_assign = T::n_total_op_assign_;
199 "line %d: %s<%s>(\"%s\", ...) == result + %zu, got %td",
200 __LINE__, fname, itname, src,
nsrc,
end.cur_ - xdst);
206 typedef unsigned char UChar;
208 success =
UChar (src [
i]) == xdst [
nsrc -
i - 1].data_.val_;
214 "line %d: %s<%s>(\"%s\", ...) ==> "
215 "\"%{X=*.*}\"; unexpected element value %#c at offset %zu",
216 __LINE__, fname, itname, src,
217 int (
sizeof (*xsrc)),
int (
nsrc),
int (
i), xsrc,
218 xdst [
nsrc -
i - 1].data_.val_,
i);
220 success = T::n_total_op_assign_ - last_n_op_assign ==
nsrc;
222 "line %d: %s<%s>(\"%s\", ...); called operator=() "
223 "%zu times, %zu expected",
224 __LINE__, fname, itname, src,
225 T::n_total_op_assign_ - last_n_op_assign,
nsrc);
234template <
class Iterator1,
class Iterator2,
class T,
class Tag>
237 static const char*
const it1name =
type_name (it1, (
T*)0);
238 static const char*
const it2name =
type_name (it2, (
T*)0);
241 rw_info (0, 0, 0,
"std::reverse_copy (%s, %1$s, %s)", it1name, it2name);
244 rw_info (0, 0, 0,
"std::reverse (%s, %1$s)", it1name);
249 test_reverse (__LINE__, src, it1, it2, (T*)0, tag)
262 TEST (
"abcdefghijk");
263 TEST (
"abcdefghijkl");
264 TEST (
"abcdefghijklm");
265 TEST (
"abcdefghijklmn");
266 TEST (
"abcdefghijklmno");
267 TEST (
"abcdefghijklmnop");
268 TEST (
"abcdefghijklmnopq");
269 TEST (
"abcdefghijklmnopqr");
270 TEST (
"abcdefghijklmnopqrs");
271 TEST (
"abcdefghijklmnopqrst");
272 TEST (
"abcdefghijklmnopqrstu");
273 TEST (
"abcdefghijklmnopqrstuv");
274 TEST (
"abcdefghijklmnopqrstuvw");
275 TEST (
"abcdefghijklmnopqrstuvwx");
276 TEST (
"abcdefghijklmnopqrstuvwxy");
277 TEST (
"abcdefghijklmnopqrstuvwxyz");
290template <
class T,
class Tag>
294 "template <class %s> %1$s std::reverse (%1$s, %1$s)",
295 "BidirectionalIterator");
298 rw_note (0, __FILE__, __LINE__,
"BidirectionalIterator test disabled");
305 rw_note (0, __FILE__, __LINE__,
"RandomAccessIterator test disabled");
314template <
class ReverseIterator,
class T,
class Tag>
318 rw_note (0, __FILE__, __LINE__,
"OutputIterator test disabled");
325 rw_note (0, __FILE__, __LINE__,
"ForwardIterator test disabled");
332 rw_note (0, __FILE__, __LINE__,
"BidirectionalIterator test disabled");
339 rw_note (0, __FILE__, __LINE__,
"RandomAccessIterator test disabled");
348template <
class T,
class Tag>
352 "template <class %s, class %s> %2$s "
353 "std::reverse_copy (%1$s, %1$s, %2$s)",
354 "BidirectionalIterator",
"OutputIterator");
357 rw_note (0, __FILE__, __LINE__,
"BidirectionalIterator test disabled");
364 rw_note (0, __FILE__, __LINE__,
"RandomAccessIterator test disabled");
380 rw_note (0, __FILE__, __LINE__,
"std::reverse test disabled");
387 rw_note (0, __FILE__, __LINE__,
"std::reverse_copy test disabled");
398int main (
int argc,
char *argv[])
400 return rw_test (argc, argv, __FILE__,
404 "|-no-reverse_copy# "
405 "|-no-OutputIterator# "
406 "|-no-ForwardIterator# "
407 "|-no-BidirectionalIterator# "
408 "|-no-RandomAccessIterator#",
const MyBuffer< char > nsrc[]
void run_test(const ForwardIterator &dummy, T *, Predicate *pred)
int rw_opt_no_reverse_copy
void test_reverse_copy(ReverseIterator it, const T *, Tag tag)
int rw_opt_no_output_iter
void test_reverse(int line, const char *src, Iterator dummy, NoIterator, const T *, ReverseTag)
#define _RWSTD_NAMESPACE(name)
#define _RWSTD_SPECIALIZED_FUNCTION
T * make_iter(T *cur, const T *, const T *, T *)
_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 *,...)