alsk/celero/bone/common.cpp

33 lines
895 B
C++

#include <numeric>
#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);
}
}