10 using duration =
long double;
13 using args = std::vector<arg>;
20 static std::string format(
const arg v) {
21 return std::to_string(v);
27 static std::string format(
const duration v) {
29 ss << std::fixed << std::setprecision(2) << v;
35 std::string format(T v) {
40 std::string_view name;
56 name = std::max(name, other.name);
57 mean = std::max(mean, other.mean);
58 median = std::max(median, other.median);
59 stddev = std::max(stddev, other.stddev);
60 cv = std::max(cv, other.cv);
64 struct formatted_entry {
77 : name(std::move(name)),
78 mean(std::move(mean)),
79 median(std::move(median)),
80 stddev(std::move(stddev)),
84 explicit formatted_entry(
const entry &e);
90 using prepare_fn = void(*)(args &);
91 using target_fn = void(*)(arg);
95 bool light_warmup =
false;
96 target_fn target =
nullptr;
97 prepare_fn prepare =
nullptr;
98 size_t iteration = 10000;
104 std::vector<std::unique_ptr<options>> &get_options();
109 void warmup_light(arg arg)
const;
110 void warmup_heavy(arg arg)
const;
116 benchmark(
const std::string &name, target_fn target);
124 benchmark
prepare(
const prepare_fn fn)
const {
157 benchmark
warmup(
const bool light)
const {
158 _options->light_warmup = light;
201 std::vector<entry> run();
208 void print(
const std::vector<entry> &entries);
211#define UB_CONCAT_(a, b) a##b
212#define UB_CONCAT(a, b) UB_CONCAT_(a, b)
213#define BENCHMARK(fn) auto UB_CONCAT(__ubench_, __COUNTER__) = ubench::benchmark(#fn, fn)
void operator()(std::vector< entry > &entries) const
duration operator()(arg arg, size_t iter) const
void warm_up(arg arg) const
benchmark step(const size_t step) const
Definition ubench.h:146
entry operator()(arg arg) const
benchmark warmup(const bool light) const
Definition ubench.h:157
benchmark iteration(const size_t iteration) const
Definition ubench.h:135
benchmark prepare(const prepare_fn fn) const
Definition ubench.h:124