11#ifndef M5_UNIT_COMPONENT_GOOGLETEST_HELPER_HPP
12#define M5_UNIT_COMPONENT_GOOGLETEST_HELPER_HPP
14#include <M5Utility.hpp>
41 return static_cast<uint32_t
>(sum /
intervals.size());
51 std::sort(sorted.begin(), sorted.end());
52 auto n = sorted.size();
53 return (n % 2) ? sorted[n / 2] : (sorted[n / 2 - 1] + sorted[n / 2]) / 2;
86 const uint32_t timeout_duration = 0,
87 void (*callback)(U*) =
nullptr)
89 static_assert(std::is_base_of<m5::unit::Component, U>::value,
"U must be derived from Component");
97 auto actual_timeout = timeout_duration ? timeout_duration : result.
expected_interval * (times + 1);
98 auto timeout_at = m5::utility::millis() + actual_timeout;
99 uint32_t remaining = times;
100 decltype(
unit->updatedMillis()) prev{};
101 bool first_update =
true;
103 while (remaining && m5::utility::millis() <= timeout_at) {
105 if (
unit->updated()) {
108 auto um =
unit->updatedMillis();
112 first_update =
false;
Top level namespace of M5stack.
Definition test_helper.hpp:20
Result of periodic measurement data collection with statistical analysis.
Definition test_helper.hpp:28
uint32_t median() const
Median of intervals (ms), robust to outliers.
Definition test_helper.hpp:45
uint32_t update_count
Number of successful updates.
Definition test_helper.hpp:30
uint32_t max_interval() const
Maximum interval (ms)
Definition test_helper.hpp:66
uint32_t expected_interval
Expected interval from unit->interval()
Definition test_helper.hpp:31
bool timed_out
True if timeout before collecting all samples.
Definition test_helper.hpp:32
uint32_t average() const
Average of intervals (ms)
Definition test_helper.hpp:35
uint32_t min_interval() const
Minimum interval (ms)
Definition test_helper.hpp:57
std::vector< uint32_t > intervals
All inter-update intervals (ms)
Definition test_helper.hpp:29
PeriodicMeasurementResult collect_periodic_measurements(U *unit, const uint32_t times=8, const uint32_t timeout_duration=0, void(*callback)(U *)=nullptr)
Collect periodic measurement data from a unit.
Definition test_helper.hpp:85