From bbcd179c475eeccf1928b1249da2b663efefc949 Mon Sep 17 00:00:00 2001 From: Lukas Senionis Date: Sun, 17 Nov 2024 00:23:46 +0200 Subject: [PATCH] fix: unstable timed thread tests (#126) --- tests/unit/general/test_retry_scheduler.cpp | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/tests/unit/general/test_retry_scheduler.cpp b/tests/unit/general/test_retry_scheduler.cpp index 6d0d0d1..efa6d3d 100644 --- a/tests/unit/general/test_retry_scheduler.cpp +++ b/tests/unit/general/test_retry_scheduler.cpp @@ -21,6 +21,13 @@ namespace { constMethod() const { /* noop */ } }; + // Some threads wake up a little earlier than expected, so we round the lower bound to + // 99% of the expected value to stabilize the tests + int + roundTo99(int value) { + return static_cast(std::round(value * 0.99)); + } + // Test fixture(s) for this file class RetrySchedulerTest: public BaseTest { public: @@ -157,9 +164,9 @@ TEST_F_S(Schedule, Execution, Immediate) { std::this_thread::sleep_for(1ms); } - EXPECT_GE(first_call_delay, 0); + EXPECT_GE(first_call_delay, roundTo99(0)); EXPECT_LT(first_call_delay, default_duration.count()); - EXPECT_GE(second_call_delay, default_duration.count() * 2); + EXPECT_GE(second_call_delay, roundTo99(default_duration.count() * 2)); EXPECT_LT(second_call_delay, default_duration.count() * 3); EXPECT_TRUE(first_call_scheduler_thread_id); @@ -199,9 +206,9 @@ TEST_F_S(Schedule, Execution, ImmediateWithSleep) { std::this_thread::sleep_for(1ms); } - EXPECT_GE(first_call_delay, default_duration.count() * 2); + EXPECT_GE(first_call_delay, roundTo99(default_duration.count() * 2)); EXPECT_LT(first_call_delay, default_duration.count() * 3); - EXPECT_GE(second_call_delay, default_duration.count()); + EXPECT_GE(second_call_delay, roundTo99(default_duration.count())); EXPECT_LT(second_call_delay, default_duration.count() * 2); EXPECT_TRUE(first_call_scheduler_thread_id); @@ -241,9 +248,9 @@ TEST_F_S(Schedule, Execution, ScheduledOnly) { std::this_thread::sleep_for(1ms); } - EXPECT_GE(first_call_delay, default_duration.count() * 2); + EXPECT_GE(first_call_delay, roundTo99(default_duration.count() * 2)); EXPECT_LT(first_call_delay, default_duration.count() * 3); - EXPECT_GE(second_call_delay, default_duration.count()); + EXPECT_GE(second_call_delay, roundTo99(default_duration.count())); EXPECT_LT(second_call_delay, default_duration.count() * 2); EXPECT_TRUE(first_call_scheduler_thread_id);