#include #include "common.h" namespace bench { Data Task::operator()(int min, int max) const { Data v(size); std::generate_n(std::begin(v), size, [&, i=0]() mutable { return (++i)%(max-min+1) + min; }); return v; }; Data taskD(Data const& data) { Data out(data.size()+2); std::copy(std::begin(data), std::end(data), std::begin(out)+2); out[0] = std::accumulate(std::begin(data), std::end(data), Data::value_type{}); out[1] = out[0]&1? out[0]*out[0] : out[0]; return out; } Data const& select(Data const& a, Data const& b) { Data::value_type sumA = std::accumulate(std::begin(a), std::end(a), Data::value_type{}); Data::value_type sumB = std::accumulate(std::begin(b), std::end(b), Data::value_type{}); return sumA < sumB? a : b; } Data::value_type project(Data const& a, Data::value_type const& init) { return std::accumulate(std::begin(a), std::end(a), init); } }