#include #include #include "mock_temperature_source.hpp" namespace djm::device { MockTemperatureSource::MockTemperatureSource(size_t seed) : generator(seed) {} std::optional MockTemperatureSource::read( std::chrono::milliseconds timeout) { if (std::bernoulli_distribution(0.01)(generator)) { // reading temperature failed, yikes return std::nullopt; } // determine random time until read occurs auto millisLag = std::uniform_int_distribution<>(0, 50)(generator); if (millisLag > timeout.count()) { return std::nullopt; } std::this_thread::sleep_for(std::chrono::milliseconds(millisLag)); std::normal_distribution<> normalDist(0.0, 3.5); return TemperatureReading{ 56.7 + normalDist(generator), 45.6 + normalDist(generator), 34.5 + normalDist(generator), 32.1 + normalDist(generator), }; } } // namespace djm::device