Skip to content
Snippets Groups Projects
AlarmFutureTest.cpp 875 B
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));
}