aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/cru/base/platform/unix/Timer.h2
-rw-r--r--test/base/CMakeLists.txt1
-rw-r--r--test/base/platform/unix/TimerTest.cpp24
3 files changed, 26 insertions, 1 deletions
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 <catch2/catch_test_macros.hpp>
+
+#include <poll.h>
+#include <chrono>
+
+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);
+}