Newer
Older
// 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));
}