41#ifndef _RWSTD_NO_EXPLICIT_INSTANTIATION
93 const int tmp = (*i).data_.val_;
95 (*i).data_.val_ = (*j).data_.val_;
96 (*j).data_.val_ =
tmp;
105 const int tmp = (*i).data_.val_;
107 (*i).data_.val_ = (*j).data_.val_;
108 (*j).data_.val_ =
tmp;
117 const int tmp = (*i).data_.val_;
119 (*i).data_.val_ = (*j).data_.val_;
120 (*j).data_.val_ =
tmp;
128template <
class Iterator,
class T>
134 static const char*
const itname =
type_name (it, (
T*)0);
135 const char*
const fname =
"rotate";
138 const std::size_t
nsrc = std::strlen (src);
141 T*
const xsrc = T::from_char (src,
nsrc);
157 std::size_t
xpos = 0;
165 typedef unsigned char UChar;
167 success =
UChar (src [
i]) == xsrc [
xpos].data_.val_;
173 "line %d: %s<%s>(\"%s\", %zu, ...) ==> "
174 "\"%{X=*.*}\"; unexpected element value %#c at %zu",
175 __LINE__, fname, itname, src, midnsrc,
176 int (
sizeof (*xsrc)),
int (
nsrc),
int (
i), xsrc,
177 xsrc [
xpos].data_.val_,
i);
181 "line %d: %s<%s>(\"%s\", %zu, ...); called iter_swap() "
182 "%zu times, expected no more than %zu",
183 __LINE__, fname, itname, src, midnsrc,
192template <
class Iterator,
class OutputIterator,
class T>
199 static const char*
const it1name =
type_name (it, (
T*)0);
200 static const char*
const it2name =
type_name (dummy, (
T*)0);
201 const char*
const fname =
"rotate_copy";
203 const std::size_t
nsrc = std::strlen (src);
205 T*
const xsrc = T::from_char (src,
nsrc);
206 T*
const xdst = T::from_char (src,
nsrc);
214 std::size_t last_n_op_assign = T::n_total_op_assign_;
221 "line %d: %s<%s, %s>(\"%s\", %zu, ...) == result + %zu, got %td",
222 __LINE__, fname, it1name, it2name, src, midnsrc,
227 std::size_t
xpos = 0;
232 typedef unsigned char UChar;
234 success =
UChar (src [
i]) == xdst [
xpos].data_.val_;
240 "line %d: %s<%s, %s>(\"%s\", %zu, ...) ==> "
241 "\"%{X=*.*}\"; unexpected element value %#c at %zu",
242 __LINE__, fname, it1name, it2name, src, midnsrc,
243 int (
sizeof (*xsrc)),
int (
nsrc),
int (
i), xsrc,
244 xdst [
xpos].data_.val_,
i);
246 success = T::n_total_op_assign_ - last_n_op_assign ==
nsrc;
248 "line %d: %s<%s, %s>(\"%s\", %zu, ...); called operator=() "
249 "%zu times, %zu expected",
250 __LINE__, fname, it1name, it2name, src, midnsrc,
251 T::n_total_op_assign_ - last_n_op_assign,
nsrc);
260template <
class Iterator1,
class Iterator2,
class T,
class Tag>
263 static const char*
const it1name =
type_name (it1, (
T*)0);
264 static const char*
const it2name =
type_name (it2, (
T*)0);
268 "std::rotate_copy (%s, %1$s, %1$s, %s)",
273 "std::rotate (%s, %1$s, %1$s)",
278#define TEST(src, middle) \
279 test_rotate (__LINE__, src, middle, it1, it2, (T*)0, tag)
289 TEST (
"abcdefgh", 4);
290 TEST (
"abcdefghi", 4);
291 TEST (
"abcdefghij", 5);
293 TEST (
"abcdefghijk", 0);
294 TEST (
"abcdefghijk", 1);
295 TEST (
"abcdefghijk", 2);
296 TEST (
"abcdefghijk", 3);
297 TEST (
"abcdefghijk", 4);
298 TEST (
"abcdefghijk", 5);
299 TEST (
"abcdefghijk", 6);
300 TEST (
"abcdefghijk", 7);
301 TEST (
"abcdefghijk", 8);
302 TEST (
"abcdefghijk", 9);
303 TEST (
"abcdefghijk", 10);
316template <
class T,
class Tag>
320 "template <class %s> std::rotate (%1$s, %1$s, %1$s)",
324 rw_note (0, __FILE__, __LINE__,
"ForwardIterator test disabled");
331 rw_note (0, __FILE__, __LINE__,
"BidirectionalIterator test disabled");
338 rw_note (0, __FILE__, __LINE__,
"RandomAccessIterator test disabled");
347template <
class RotateIterator,
class T,
class Tag>
351 rw_note (0, __FILE__, __LINE__,
"OutputIterator test disabled");
358 rw_note (0, __FILE__, __LINE__,
"ForwardIterator test disabled");
365 rw_note (0, __FILE__, __LINE__,
"BidirectionalIterator test disabled");
372 rw_note (0, __FILE__, __LINE__,
"RandomAccessIterator test disabled");
381template <
class T,
class Tag>
385 "template <class %s, class %s> %2$s "
386 "std::rotate_copy (%1$s, %1$s, %1$s, %2$s)",
387 "ForwardIterator",
"OutputIterator");
390 rw_note (0, __FILE__, __LINE__,
"ForwardIterator test disabled");
397 rw_note (0, __FILE__, __LINE__,
"BidirectionalIterator test disabled");
404 rw_note (0, __FILE__, __LINE__,
"RandomAccessIterator test disabled");
420 rw_note (0, __FILE__, __LINE__,
"std::rotate test disabled");
427 rw_note (0, __FILE__, __LINE__,
"std::rotate_copy test disabled");
438int main (
int argc,
char *argv[])
440 return rw_test (argc, argv, __FILE__,
445 "|-no-OutputIterator# "
446 "|-no-ForwardIterator# "
447 "|-no-BidirectionalIterator# "
448 "|-no-RandomAccessIterator#",
const MyBuffer< char > nsrc[]
void run_test(const ForwardIterator &dummy, T *, Predicate *pred)
void test_rotate_copy(RotateIterator it, const T *, Tag tag)
void test_rotate(int line, const char *src, std::size_t midnsrc, Iterator it, NoIterator, const T *, RotateTag)
int rw_opt_no_rotate_copy
#define TEST(src, middle)
int rw_opt_no_output_iter
#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 *,...)