55#ifndef _RWSTD_NO_EXPLICIT_INSTANTIATION
116 ++n_total_op_plus_assign_;
118#ifndef _RWSTD_NO_EXCEPTIONS
123 if ( op_plus_assign_throw_ptr_
124 && n_total_op_plus_assign_ == *op_plus_assign_throw_ptr_) {
153 operator T ()
const {
162 void operator!()
const;
183 res.data_.val_ +=
y.data_.val_;
196template <
class T,
class InputIterator,
class BinaryOp>
202 const char*
const itname =
type_name (it, (
T*)0);
203 const char*
const tname =
"Y";
204 const char*
const opname =
"BinaryOperation";
206 rw_info (0, 0, 0,
"std::accumulate (%s, %1$s, %s%{?}, %s%{;})",
207 itname, tname, 0 != op, opname);
211 int sum =
init.data_.val_;
217 for (std::size_t
i = 0;
i !=
N; ++
i) {
219 T*
const buf_end =
buf +
i;
224 BinaryOp bin_op (0, 0);
227 std::accumulate (first,
last,
init, bin_op)
228 : std::accumulate (first,
last,
init);
231 bool success = sum ==
res.data_.val_;
233 "step %zu: accumulate <%s, %s%{?}, %s%{;}> "
235 i + 1, itname, tname, 0 != op, opname,
res.data_.val_, sum);
237 sum +=
buf [
i].data_.val_;
257template <
class T,
class BinaryOp>
268 "template <class %s, class %s%{?}, class %s%{;}> "
269 "%2$s std::accumulate (%1$s, %1$s, %2$s%{?}, %s%{;})",
270 "InputIterator",
"T", 0 != op,
"BinaryOperation",
271 0 != op,
"BinaryOperation");
274 rw_note (0, 0, __LINE__,
"InputIterator test disabled");
281 rw_note (0, 0, __LINE__,
"ForwardIterator test disabled");
288 rw_note (0, 0, __LINE__,
"BidirectionalIterator test disabled");
295 rw_note (0, 0, __LINE__,
"RandomAccessIterator test disabled");
313 rw_note (0, 0, 0,
"accumulate with binary operation test disabled");
322int main (
int argc,
char *argv[])
324 return rw_test (argc, argv, __FILE__,
329 "|-no-InputIterator# "
330 "|-no-ForwardIterator# "
331 "|-no-BidirectionalIterator# "
332 "|-no-RandomAccessIterator#",
void run_test(const ForwardIterator &dummy, T *, Predicate *pred)
void test_accumulate(const std::size_t N, const InputIterator &it, const T *, const BinaryOp *op)
#define _RWSTD_NAMESPACE(name)
#define _RWSTD_CONST_CAST(T, x)
_TEST_EXPORT int gen_seq()
_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 *,...)
conv_to_T< Y > operator()(const Y &x, const Y &y)
static std::size_t funcalls_
static std::size_t * op_plus_assign_throw_ptr_
static std::size_t op_plus_assign_throw_count_
static std::size_t n_total_op_plus_assign_
std::size_t n_op_plus_assign_
static conv_to_T make(T val)
plus_asgn & operator+=(const plus_asgn &rhs)