36 lines
924 B
C++
36 lines
924 B
C++
#include <random>
|
|
#include <thread>
|
|
|
|
#include "mock_temperature_source.hpp"
|
|
|
|
namespace djm::device {
|
|
|
|
MockTemperatureSource::MockTemperatureSource(size_t seed) : generator(seed) {}
|
|
|
|
std::optional<TemperatureReading> 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
|