From 4e377b298ff126453270139cb498a43d12f6382d Mon Sep 17 00:00:00 2001 From: Yuqian Yang Date: Wed, 3 Sep 2025 12:42:10 +0800 Subject: UnixTimerFile test. --- include/cru/base/platform/unix/Timer.h | 2 +- test/base/CMakeLists.txt | 1 + test/base/platform/unix/TimerTest.cpp | 24 ++++++++++++++++++++++++ 3 files changed, 26 insertions(+), 1 deletion(-) create mode 100644 test/base/platform/unix/TimerTest.cpp diff --git a/include/cru/base/platform/unix/Timer.h b/include/cru/base/platform/unix/Timer.h index e2cbff7d..49f25185 100644 --- a/include/cru/base/platform/unix/Timer.h +++ b/include/cru/base/platform/unix/Timer.h @@ -20,7 +20,7 @@ class UnixTimerFile : public Object2 { this->read_fd_ = std::move(fds.read); this->write_fd_ = std::move(fds.write); - this->thread_ = std::thread([this, &time] { + this->thread_ = std::thread([this, time] { std::this_thread::sleep_for(time); constexpr auto buffer = ""; auto written = ::write(this->write_fd_, buffer, 1); diff --git a/test/base/CMakeLists.txt b/test/base/CMakeLists.txt index 683c8295..5abba240 100644 --- a/test/base/CMakeLists.txt +++ b/test/base/CMakeLists.txt @@ -25,6 +25,7 @@ target_compile_definitions(CruBaseTest PRIVATE if (UNIX AND NOT EMSCRIPTEN) target_sources(CruBaseTest PRIVATE + platform/unix/TimerTest.cpp platform/unix/UnixFileTest.cpp platform/unix/UnixFileStreamTest.cpp ) diff --git a/test/base/platform/unix/TimerTest.cpp b/test/base/platform/unix/TimerTest.cpp new file mode 100644 index 00000000..261cc6b2 --- /dev/null +++ b/test/base/platform/unix/TimerTest.cpp @@ -0,0 +1,24 @@ +#include "cru/base/platform/unix/Timer.h" + +#include + +#include +#include + +TEST_CASE("UnixTimerFile Work", "[unix][time]") { + using namespace cru; + using namespace cru::platform::unix; + + auto test_miliseconds = 100; + auto test_duration = std::chrono::milliseconds(test_miliseconds); + auto start = std::chrono::steady_clock::now(); + REQUIRE((std::chrono::steady_clock::now() - start) < test_duration); + + UnixTimerFile timer(test_duration); + + struct pollfd fds[1]; + fds[0].fd = timer.GetReadFd(); + fds[0].events = POLLIN; + REQUIRE(::poll(fds, 1, test_miliseconds * 2) == 1); + REQUIRE((std::chrono::steady_clock::now() - start) > test_duration); +} -- cgit v1.2.3