32 #include <type_traits>
39 namespace timeit_detail
42 template<
typename TimeUnit>
50 template<
typename TimeUnit>
54 if constexpr (std::is_same<TimeUnit, std::chrono::hours>::value)
58 else if constexpr (std::is_same<TimeUnit, std::chrono::minutes>::value)
62 else if constexpr (std::is_same<TimeUnit, std::chrono::seconds>::value)
66 else if constexpr (std::is_same<TimeUnit, std::chrono::milliseconds>::value)
68 unit =
" milliseconds";
70 else if constexpr (std::is_same<TimeUnit, std::chrono::microseconds>::value)
72 unit =
" microseconds";
74 else if constexpr (std::is_same<TimeUnit, std::chrono::nanoseconds>::value)
76 unit =
" nanoseconds";
80 unit =
" time units of some sort";
83 os <<
"Timeit results:\n";
84 os <<
"\tmin: " << result.
min.count() << unit <<
"\n";
85 os <<
"\tmax: " << result.
max.count() << unit <<
"\n";
86 os <<
"\tmean: " << result.
mean.count() << unit <<
"\n";
102 template<
typename TimeUnit,
typename Function,
typename... Args>
103 timeit_detail::Result<TimeUnit>
104 timeit(
uint32 numIterations,
bool printResults, Function
function, Args&&... args) noexcept
109 for (
uint32 i = 0; i < numIterations; ++i)
118 using ResultType = std::invoke_result_t<Function, Args...>;
119 if constexpr (std::is_same_v<ResultType, void>)
121 function(std::forward<Args>(args)...);
126 [[maybe_unused]]
const ResultType functionResult =
function(std::forward<Args&>(args)...);
129 const auto elapsedTime = timer.toc(
false);
131 result.mean = result.mean + elapsedTime;
132 result.min =
std::min(result.min, elapsedTime);
133 result.max =
std::max(result.max, elapsedTime);
136 result.mean = result.mean / numIterations;
A timer class for timing code execution.
Definition: Timer.hpp:44
std::ostream & operator<<(std::ostream &os, const Result< TimeUnit > result)
Definition: timeit.hpp:51
Definition: Utils/cube.hpp:33
timeit_detail::Result< TimeUnit > timeit(uint32 numIterations, bool printResults, Function function, Args &&... args) noexcept
Definition: timeit.hpp:104
NdArray< dtype > max(const NdArray< dtype > &inArray, Axis inAxis=Axis::NONE)
Definition: max.hpp:44
NdArray< dtype > min(const NdArray< dtype > &inArray, Axis inAxis=Axis::NONE)
Definition: min.hpp:44
std::uint32_t uint32
Definition: Types.hpp:40
Result statistics of a timeit run.
Definition: timeit.hpp:44
TimeUnit max
Definition: timeit.hpp:46
TimeUnit mean
Definition: timeit.hpp:47
TimeUnit min
Definition: timeit.hpp:45