65#ifndef _RWSTD_NO_EXPLICIT_INSTANTIATION
104 operator T ()
const {
113 void operator!()
const;
135 res.data_.val_ +=
y.data_.val_;
161 res.data_.val_ *=
y.data_.val_;
187template <
class InputIterator1,
class InputIterator2>
201 const InputIterator1 first1 (xsrc1, xsrc1, xsrc1_end);
202 const InputIterator1 last1 (xsrc1_end, xsrc1, xsrc1_end);
203 const InputIterator2 first2 (xsrc2, xsrc2, xsrc2_end);
206 std::inner_product (first1, last1, first2,
init, *op1, *op2)
207 : std::inner_product (first1, last1, first2,
init);
224 const char*
const it1name = alg.
iter_names [0];
225 const char*
const it2name = alg.
iter_names [1];
226 const char*
const tname =
"UserClass";
227 const char*
const op1name =
"Plus";
228 const char*
const op2name =
"Multiple";
231 "std::inner_product (%s, %1$s, %s, %s%{?}, %s, %s%{;})",
232 it1name, it2name, tname, binop, op1name, op2name);
236 int sum =
init.data_.val_;
243 for (std::size_t
i = 0;
i !=
N; ++
i) {
251 const Accumulator*
const pbinop1 = binop ? &acc : 0;
255 init, pbinop1, pbinop2);
260 "inner_product <%s, %s, %s%{?}, %s, %s%{;}>"
261 "({%{X=+*}}, {%{X=+*}}) == %d, got %d",
262 it1name, it2name, tname, binop, op1name, op2name,
263 int (
sizeof (*buf1)),
int (
i), buf1,
287template <
class InputIterator1,
class InputIterator2>
289 const InputIterator1&,
290 const InputIterator2&,
299template <
class InputIterator1>
301 const InputIterator1 &it1,
324 "template <class %s, class %s, class %s%{?}, class %s, "
325 "class %s%{;}> %3$s inner_product (%1$s, %1$s, %2$s, "
326 "%3$s%{?}, %s, %s%{;})",
327 "InputIterator1",
"InputIterator2",
"UserClass",
328 binop,
"BinaryOperation1",
"BinaryOperation2", binop,
329 "BinaryOperation1",
"BinaryOperation2");
332 rw_note (0, 0, 0,
"InputIterator test disabled");
337 rw_note (0, 0, 0,
"ForwardIterator test disabled");
342 rw_note (0, 0, 0,
"BidirectionalIterator test disabled");
347 rw_note (0, 0, 0,
"RandomAccessIterator test disabled");
364 "inner_product with binary operations test disabled");
373int main (
int argc,
char *argv[])
375 return rw_test (argc, argv, __FILE__,
380 "|-no-InputIterator# "
381 "|-no-ForwardIterator# "
382 "|-no-BidirectionalIterator# "
383 "|-no-RandomAccessIterator#",
void run_test(const ForwardIterator &dummy, T *, Predicate *pred)
void test_inner_product(const std::size_t N, const InnerProductBase &alg, bool binop)
void gen_inner_product_test(const std::size_t N, const InputIterator1 &, const InputIterator2 &, bool binop)
const plus_asgn< T > & operator*(const plus_asgn< T > &lhs, const plus_asgn< T > &rhs)
#define _RWSTD_UNUSED(arg)
#define _RWSTD_NAMESPACE(name)
_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_
virtual ~InnerProductBase()
const char * iter_names[2]
virtual UserClass inner_product(const UserClass *xsrc1, const UserClass *xsrc1_end, const UserClass *xsrc2, const UserClass *xsrc2_end, const UserClass &init, const Accumulator *op1, const Multiplicator *op2) const =0
virtual UserClass inner_product(const UserClass *xsrc1, const UserClass *xsrc1_end, const UserClass *xsrc2, const UserClass *xsrc2_end, const UserClass &init, const Accumulator *op1, const Multiplicator *op2) const
static std::size_t funcalls_
conv_to_T< UserClass > operator()(const UserClass &x, const UserClass &y)
static conv_to_T make(T val)
plus_asgn & operator+=(const plus_asgn &rhs)