[gcc r16-4432] libstdc++: Add negative this_thread::sleep tests [PR116586]
Jonathan Wakely
redi@gcc.gnu.org
Tue Oct 14 16:35:09 GMT 2025
https://gcc.gnu.org/g:6e9ab669b584496dd628700d0d69bd20c5c12ca7
commit r16-4432-g6e9ab669b584496dd628700d0d69bd20c5c12ca7
Author: Mike Crowe <mac@mcrowe.com>
Date: Sun Sep 21 17:15:52 2025 +0100
libstdc++: Add negative this_thread::sleep tests [PR116586]
Add tests to ensure that std::this_thread::sleep_for() and
std::this_thread::sleep_until() cope with being passed negative times
correctly. These tests prove that the functions don't suffer from
libstdc++/PR116586, and will stay that way.
libstdc++-v3/ChangeLog:
PR libstdc++/116586
* testsuite/30_threads/this_thread/sleep_for.cc: Add
test_negative() test.
* testsuite/30_threads/this_thread/sleep_until.cc: Make existing
test use both system_clock and steady_clock. Add test_negative()
test.
Signed-off-by: Mike Crowe <mac@mcrowe.com>
Diff:
---
.../testsuite/30_threads/this_thread/sleep_for.cc | 13 +++++++++++
.../30_threads/this_thread/sleep_until.cc | 26 ++++++++++++++++++----
2 files changed, 35 insertions(+), 4 deletions(-)
diff --git a/libstdc++-v3/testsuite/30_threads/this_thread/sleep_for.cc b/libstdc++-v3/testsuite/30_threads/this_thread/sleep_for.cc
index 3f55ccc12aa5..5b0518d6bb9f 100644
--- a/libstdc++-v3/testsuite/30_threads/this_thread/sleep_for.cc
+++ b/libstdc++-v3/testsuite/30_threads/this_thread/sleep_for.cc
@@ -37,7 +37,20 @@ test01()
VERIFY( (chr::system_clock::now() - begin) >= ms );
}
+void
+test_negative()
+{
+ chr::system_clock::time_point begin = chr::system_clock::now();
+
+ std::this_thread::sleep_for(-chr::hours(8));
+
+ // That should have completed immediately, but be generous because we don't
+ // want spurious failures on busy machines.
+ VERIFY( (chr::system_clock::now() - begin) < chr::seconds(10) );
+}
+
int main()
{
test01();
+ test_negative();
}
diff --git a/libstdc++-v3/testsuite/30_threads/this_thread/sleep_until.cc b/libstdc++-v3/testsuite/30_threads/this_thread/sleep_until.cc
index 1fb82b671772..8c70c2ee78fd 100644
--- a/libstdc++-v3/testsuite/30_threads/this_thread/sleep_until.cc
+++ b/libstdc++-v3/testsuite/30_threads/this_thread/sleep_until.cc
@@ -26,18 +26,36 @@
namespace chr = std::chrono;
+template <typename Clock>
void
test01()
{
- chr::system_clock::time_point begin = chr::system_clock::now();
+ typename Clock::time_point begin = Clock::now();
chr::microseconds ms(500);
- std::this_thread::sleep_until(chr::system_clock::now() + ms);
+ std::this_thread::sleep_until(Clock::now() + ms);
- VERIFY( (chr::system_clock::now() - begin) >= ms );
+ VERIFY( (Clock::now() - begin) >= ms );
+}
+
+template <typename Clock>
+void
+test_negative()
+{
+ typename Clock::time_point begin = Clock::now();
+
+ typename Clock::time_point tp(-chr::hours(8));
+ std::this_thread::sleep_until(tp);
+
+ // That should have completed immediately, but be generous because we don't
+ // want spurious failures on busy machines.
+ VERIFY( (Clock::now() - begin) < chr::seconds(10) );
}
int main()
{
- test01();
+ test01<chr::steady_clock>();
+ test01<chr::system_clock>();
+ test_negative<chr::steady_clock>();
+ test_negative<chr::system_clock>();
}
More information about the Libstdc++-cvs
mailing list