Skip to content
Snippets Groups Projects
AlarmFutureTest.cpp 881 B
Newer Older
  • Learn to ignore specific revisions
  • // 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 <compare>	// for operator>=, strong_ordering
    #include <cstdint>	// for int32_t
    #include <cstdlib>	// for exit, EXIT_SUCCESS
    
    #include "io/Future.hpp"	// for AlarmFuture
    
    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));
    
    	exit(EXIT_SUCCESS);
    }