43 const T& operator() ()
const {
46 unsigned char buf_ [
sizeof (
T)];
48 return *(
const T*)(
const void*)&
u;
76#ifndef _RWSTD_NO_EXPLICIT_INSTANTIATION
93template <
class ForwardIterator,
class T>
98 static const char*
const itname =
type_name (gen_iter, (
T*) 0);
99 static const char*
const genname =
"Generator";
102 "void std::generate (%s, %1$s, %s)", itname, genname);
109 for (std::size_t
i = 0;
i <
N; ++
i) {
112 std::size_t last_n_op_assign = T::n_total_op_assign_;
114 T*
const buf_end =
buf +
i + 1;
120 make_iter (buf_end, buf_end, buf_end, gen_iter);
127 std::generate (begin,
end,
gen);
133 for ( ;
j !=
i; ++
j) {
134 success = (begin.cur_ +
j)->data_.val_ == int (last_val +
j + 1);
140 "%zu. generate (): buf[%zu]: %d != %d",
141 i + 1,
j, last_val +
j + 1, (begin.cur_ +
j)->data_.val_ );
147 success = T::n_total_op_assign_ - last_n_op_assign ==
i + 1;
149 "%zu. generate (): complexity: %zu != %zu",
150 i + 1, T::n_total_op_assign_ - last_n_op_assign,
i + 1);
162template <
class ForwardIterator,
class Size,
class T>
168 static const char*
const itname =
type_name (gen_iter, (
T*) 0);
169 static const char*
const szname =
"Size<int>";
170 static const char*
const genname =
"Generator";
173 "void std::generate_n (%s, %s, %s)", itname, szname, genname);
180 for (std::size_t
i = 0;
i <=
N; ++
i) {
182 std::size_t last_n_op_assign = T::n_total_op_assign_;
184 T*
const buf_end =
buf +
i + 1;
189 const Size n (
typename Size::IntegralType (
i), 0);
195 std::generate_n (begin,
n,
gen);
201 for ( ;
j !=
i; ++
j) {
202 success = (begin.cur_ +
j)->data_.val_ == int (last_val +
j + 1);
208 "%zu. generate_n (): buf[%zu]: %d != %d",
209 i + 1,
j, last_val +
j + 1, (begin.cur_ +
j)->data_.val_ );
215 success = T::n_total_op_assign_ - last_n_op_assign ==
i;
217 "%zu. generate_n (): complexity: %zu != %zu",
218 i + 1, T::n_total_op_assign_ - last_n_op_assign,
i);
241 "template <class %s, class %s> "
242 "void std::generate (%1$s, %1$s, %2$s&)",
243 "ForwardIterator",
"Generator");
246 rw_note (0, __FILE__, __LINE__,
"ForwardIterator test disabled");
253 rw_note (0, __FILE__, __LINE__,
"BidirectionalIterator test disabled");
260 rw_note (0, __FILE__, __LINE__,
"RandomAccessIterator test disabled");
273 "template <class %s, class %s, class %s> "
274 "void std::generate_n (%1$s, %2$s, const %3$s&)",
275 "OutputIterator",
"Size",
"Generator");
278 rw_note (0, __FILE__, __LINE__,
"OutputIterator test disabled");
286 rw_note (0, __FILE__, __LINE__,
"ForwardIterator test disabled");
293 rw_note (0, __FILE__, __LINE__,
"BidirectionalIterator test disabled");
301 rw_note (0, __FILE__, __LINE__,
"RandomAccessIterator test disabled");
319 rw_note (0, __FILE__, __LINE__,
"std::generate test disabled");
326 rw_note (0, __FILE__, __LINE__,
"std::generate_n test disabled");
337int main (
int argc,
char *argv[])
339 return rw_test (argc, argv, __FILE__,
345 "|-no-OutputIterator# "
346 "|-no-ForwardIterator# "
347 "|-no-BidirectionalIterator# "
348 "|-no-RandomAccessIterator#",
void run_test(const ForwardIterator &dummy, T *, Predicate *pred)
int rw_opt_no_output_iter
void test_generate_n(std::size_t N, const ForwardIterator &gen_iter, const Size *, const T *)
void test_generate(std::size_t N, const ForwardIterator &gen_iter, const T *)
#define _RWSTD_SPECIALIZED_CLASS
#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_note(int, const char *, int, const char *,...)
_TEST_EXPORT int rw_assert(int, const char *, int, const char *,...)