// SPDX-License-Identifier: LGPL-3.0-or-later // Copyright © 2020-2021 Florian Fischer #include <cassert> // for assert #include <cerrno> // for ETIME #include <chrono> // for microseconds, duration_cast, operator- #include <cstdint> // for int32_t #include "emper-config.h" #include "io/Future.hpp" // for AlarmFuture #ifdef EMPER_HAS_COMPARE_H #include <compare> // for operator>=, strong_ordering #endif using emper::io::AlarmFuture; void emperTest() { AlarmFuture::Timespec ts = {.tv_sec = 1, .tv_nsec = 0}; AlarmFuture alarm(ts); auto start = std::chrono::high_resolution_clock::now(); int32_t res = alarm.submitAndWait(); auto end = std::chrono::high_resolution_clock::now(); // timeouts return -ETIME if they trigger assert(res == -ETIME); assert(std::chrono::duration_cast<std::chrono::microseconds>(end - start) >= std::chrono::seconds(1)); }