[libcxx testing] Remove ALLOW_RETRIES from sleep_until.pass.cpp
authorDavid Zarzycki <dave@znu.io>
Sun, 10 May 2020 09:51:14 +0000 (05:51 -0400)
committerDavid Zarzycki <dave@znu.io>
Sun, 10 May 2020 09:59:09 +0000 (05:59 -0400)
Operating systems are best effort by default, so we cannot assume that
sleep-like APIs return as soon as we'd like.

Even if a sleep-like API returns when we want it to, the potential for
preemption means that attempts to measure time are subject to delays.

libcxx/test/std/thread/thread.threads/thread.thread.this/sleep_until.pass.cpp

index 8777e4a..908635f 100644 (file)
@@ -7,7 +7,6 @@
 //===----------------------------------------------------------------------===//
 //
 // UNSUPPORTED: libcpp-has-no-threads
-// ALLOW_RETRIES: 2
 
 // <thread>
 
 
 int main(int, char**)
 {
-    typedef std::chrono::system_clock Clock;
-    typedef Clock::time_point time_point;
-    std::chrono::milliseconds ms(500);
-    time_point t0 = Clock::now();
-    std::this_thread::sleep_until(t0 + ms);
-    time_point t1 = Clock::now();
-    std::chrono::nanoseconds ns = (t1 - t0) - ms;
-    std::chrono::nanoseconds err = 5 * ms / 100;
-    // The time slept is within 5% of 500ms
-    assert(std::abs(ns.count()) < err.count());
+  typedef std::chrono::system_clock Clock;
+  typedef Clock::time_point time_point;
+  std::chrono::milliseconds ms(500);
+  time_point t0 = Clock::now();
+  std::this_thread::sleep_until(t0 + ms);
+  time_point t1 = Clock::now();
+  // NOTE: Operating systems are (by default) best effort and therefore we may
+  // have slept longer, perhaps much longer than we requested.
+  assert(t1 - t0 >= ms);
 
   return 0;
 }