40#ifndef _RWSTD_NO_EXPLICIT_INSTANTIATION
62template <
class InputIterator,
class OutputIterator,
class T>
68 static const char*
const it1name =
type_name (input_iter, (
T*) 0);
69 static const char*
const it2name =
type_name (output_iter, (
T*) 0);
71 rw_info (0, 0, 0,
"std::copy (%s, %1$s, %s)", it1name, it2name);
77 T*
const src =
new T [
N];
78 T*
const dst =
new T [
N];
80 for (std::size_t
i = 0;
i !=
N; ++
i) {
82 T*
const src_end = src +
i + 1;
83 T*
const dst_end = dst +
i + 1;
86 std::size_t last_n_op_assign = T::n_total_op_assign_;
89 make_iter (src, src, src_end, input_iter);
92 make_iter (src_end, src_end, src_end, input_iter);
95 make_iter (dst, dst, dst_end, output_iter);
98 std::copy (begin,
end, dest);
103 bool success = resptr == dst_end;
105 "%zu. copy(%p, %p, %p) == %p, got %p",
106 i, src, src_end, dst, dst_end, resptr);
113 for (;
j !=
i + 1; ++
j) {
114 success = src[
j].data_.val_ == dst[
j].data_.val_;
120 "%zu. copy(%p, %p, %p) mismatch at "
121 "offset %zu: expected %d, got %d: (%p, %p, %zu)",
122 i, src, src_end, dst,
123 j, src[
j].data_.val_, dst[
j].data_.val_,
130 success = T::n_total_op_assign_ - last_n_op_assign ==
i + 1;
132 "%zu. copy(%p, %p, %p) complexity: ",
133 "%zu != %zu",
i + 1, src, src_end, dst,
134 T::n_total_op_assign_ - last_n_op_assign,
i + 1);
147template <
class B
idirIterator1,
class B
idirIterator2,
class T>
149 const BidirIterator1 &bidir_iter1,
150 const BidirIterator2 &bidir_iter2,
153 static const char*
const it1name =
type_name (bidir_iter1, (
T*) 0);
154 static const char*
const it2name =
type_name (bidir_iter2, (
T*) 0);
156 rw_info (0, 0, 0,
"std::copy_backward (%s, %1$s, %s)", it1name, it2name);
162 T*
const src =
new T [
N];
163 T*
const dst =
new T [
N];
165 for (std::size_t
i = 0;
i !=
N; ++
i) {
172 std::size_t last_n_op_assign = T::n_total_op_assign_;
174 T*
const src_end = src +
i + 1;
175 T*
const dst_end = dst +
i + 1;
177 const BidirIterator1 begin =
178 make_iter (src, src, src_end, bidir_iter1);
180 const BidirIterator1
end =
181 make_iter (src_end, src, src_end, bidir_iter1);
183 const BidirIterator2 dest =
184 make_iter (dst_end, dst, dst_end, bidir_iter2);
186 const BidirIterator2
result =
187 std::copy_backward (begin,
end, dest);
189 const T*
const resptr =
result.cur_;
192 bool success = resptr == dst;
194 "%zu. copy_backward(%p, %p, %p) == %p, got %p",
195 i, src, src_end, dst_end, dst, resptr);
202 for (;
j !=
i + 1; ++
j) {
203 success = src[
j].data_.val_ == dst[
j].data_.val_;
209 "%zu. copy_backward(%p, %p, %p) mismatch at "
210 "offset %zu: expected %d, got %d: (%p, %p, %zu)",
211 i, src, src_end, dst_end,
212 j, src[
j].data_.val_, dst[
j].data_.val_,
219 success = T::n_total_op_assign_ - last_n_op_assign ==
i + 1;
221 "%zu. copy_backward(%p, %p, %p) complexity: "
222 "%zu != %zu",
i + 1, src, src_end, dst_end,
223 T::n_total_op_assign_ - last_n_op_assign,
i + 1);
242template <
class InputIterator,
class T>
246 rw_note (0, __FILE__, __LINE__,
"OutputIterator test disabled");
254 rw_note (0, __FILE__, __LINE__,
"ForwardIterator test disabled");
261 rw_note (0, __FILE__, __LINE__,
262 "BidirectionalIterator test disabled");
269 rw_note (0, __FILE__, __LINE__,
270 "RandomAccessIterator test disabled");
283 "template <class %s, class %s> "
284 "%2$s std::copy (%1$s, %1$s, %2$s)",
285 "InputIterator",
"OutputIterator");
288 rw_note (0, __FILE__, __LINE__,
"InputIterator test disabled");
296 rw_note (0, __FILE__, __LINE__,
"ForwardIterator test disabled");
303 rw_note (0, __FILE__, __LINE__,
304 "BidirectionalIterator test disabled");
311 rw_note (0, __FILE__, __LINE__,
312 "RandomAccessIterator test disabled");
321template <
class InputIterator,
class T>
325 rw_note (0, __FILE__, __LINE__,
326 "BidirectionalIterator test disabled");
333 rw_note (0, __FILE__, __LINE__,
334 "RandomAccessIterator test disabled");
348 "template <class %s, class %s> %2$s "
349 "std::copy_backward (%1$s, %1$s, %2$s)",
350 "BidirectionalIterator1",
"BidirectionalIterator2");
353 rw_note (0, __FILE__, __LINE__,
354 "BidirectionalIterator test disabled");
361 rw_note (0, __FILE__, __LINE__,
362 "RandomAccessIterator test disabled");
372run_test (
int,
char*[])
376 "number of loops must be non-negative, got %d",
390int main (
int argc,
char *argv[])
392 return rw_test (argc, argv, __FILE__,
396 "|-no-InputIterator#"
397 "|-no-OutputIterator#"
398 "|-no-ForwardIterator#"
399 "|-no-BidirectionalIterator#"
400 "|-no-RandomAccessIterator#",
void test_copy_backward(std::size_t N, const BidirIterator1 &bidir_iter1, const BidirIterator2 &bidir_iter2, const T *)
void test_copy(std::size_t N, const InputIterator &input_iter, const OutputIterator &output_iter, const T *)
int rw_opt_no_output_iter
#define _RWSTD_NAMESPACE(name)
_TEST_EXPORT int gen_seq()
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_fatal(int expr, const char *filename, int line, const char *fmtspec,...)
_TEST_EXPORT int rw_note(int, const char *, int, const char *,...)
_TEST_EXPORT int rw_assert(int, const char *, int, const char *,...)