[libcxx-commits] [libcxx] 1febe28 - [libcxx testing] Remove ALLOW_RETRIES from wait_for futures test

David Zarzycki via libcxx-commits libcxx-commits at lists.llvm.org
Wed May 13 03:48:30 PDT 2020


Author: David Zarzycki
Date: 2020-05-13T06:47:29-04:00
New Revision: 1febe289827602ab4da2d28799c04ee9eb2bc175

URL: https://github.com/llvm/llvm-project/commit/1febe289827602ab4da2d28799c04ee9eb2bc175
DIFF: https://github.com/llvm/llvm-project/commit/1febe289827602ab4da2d28799c04ee9eb2bc175.diff

LOG: [libcxx testing] Remove ALLOW_RETRIES from wait_for futures test

This test tried to verify that "wait()" returned quickly but "quick" is
impossible to define given a busy and/or slow system.

Instead, I've refactored the test to verify that `wait()` actually
waits which the old test did not verify.

Added: 
    

Modified: 
    libcxx/test/std/thread/futures/futures.shared_future/wait_for.pass.cpp

Removed: 
    


################################################################################
diff  --git a/libcxx/test/std/thread/futures/futures.shared_future/wait_for.pass.cpp b/libcxx/test/std/thread/futures/futures.shared_future/wait_for.pass.cpp
index 7e3cda0fd40b..d451ca0d57be 100644
--- a/libcxx/test/std/thread/futures/futures.shared_future/wait_for.pass.cpp
+++ b/libcxx/test/std/thread/futures/futures.shared_future/wait_for.pass.cpp
@@ -9,8 +9,6 @@
 // UNSUPPORTED: libcpp-has-no-threads
 // UNSUPPORTED: c++98, c++03
 
-// ALLOW_RETRIES: 2
-
 // <future>
 
 // class shared_future<R>
@@ -26,78 +24,122 @@
 
 typedef std::chrono::milliseconds ms;
 
+static const ms sleepTime(500);
+static const ms waitTime(5000);
+
 void func1(std::promise<int> p)
 {
-    std::this_thread::sleep_for(ms(500));
-    p.set_value(3);
+  std::this_thread::sleep_for(sleepTime);
+  p.set_value(3);
 }
 
 int j = 0;
 
 void func3(std::promise<int&> p)
 {
-    std::this_thread::sleep_for(ms(500));
-    j = 5;
-    p.set_value(j);
+  std::this_thread::sleep_for(sleepTime);
+  j = 5;
+  p.set_value(j);
 }
 
 void func5(std::promise<void> p)
 {
-    std::this_thread::sleep_for(ms(500));
-    p.set_value();
+  std::this_thread::sleep_for(sleepTime);
+  p.set_value();
 }
 
 int main(int, char**)
 {
-    typedef std::chrono::high_resolution_clock Clock;
-    {
-        typedef int T;
-        std::promise<T> p;
-        std::shared_future<T> f = p.get_future();
-        std::thread(func1, std::move(p)).detach();
-        assert(f.valid());
-        assert(f.wait_for(ms(300)) == std::future_status::timeout);
-        assert(f.valid());
-        assert(f.wait_for(ms(300)) == std::future_status::ready);
-        assert(f.valid());
-        Clock::time_point t0 = Clock::now();
-        f.wait();
-        Clock::time_point t1 = Clock::now();
-        assert(f.valid());
-        assert(t1-t0 < ms(5));
-    }
-    {
-        typedef int& T;
-        std::promise<T> p;
-        std::shared_future<T> f = p.get_future();
-        std::thread(func3, std::move(p)).detach();
-        assert(f.valid());
-        assert(f.wait_for(ms(300)) == std::future_status::timeout);
-        assert(f.valid());
-        assert(f.wait_for(ms(300)) == std::future_status::ready);
-        assert(f.valid());
-        Clock::time_point t0 = Clock::now();
-        f.wait();
-        Clock::time_point t1 = Clock::now();
-        assert(f.valid());
-        assert(t1-t0 < ms(5));
-    }
-    {
-        typedef void T;
-        std::promise<T> p;
-        std::shared_future<T> f = p.get_future();
-        std::thread(func5, std::move(p)).detach();
-        assert(f.valid());
-        assert(f.wait_for(ms(300)) == std::future_status::timeout);
-        assert(f.valid());
-        assert(f.wait_for(ms(300)) == std::future_status::ready);
-        assert(f.valid());
-        Clock::time_point t0 = Clock::now();
-        f.wait();
-        Clock::time_point t1 = Clock::now();
-        assert(f.valid());
-        assert(t1-t0 < ms(5));
-    }
+  typedef std::chrono::high_resolution_clock Clock;
+
+  {
+    typedef int T;
+    std::promise<T> p;
+    std::shared_future<T> f = p.get_future();
+    std::thread(func1, std::move(p)).detach();
+    assert(f.valid());
+    assert(f.wait_for(ms(1)) == std::future_status::timeout);
+    assert(f.valid());
+    assert(f.wait_for(waitTime) == std::future_status::ready);
+    assert(f.valid());
+    f.wait();
+    assert(f.valid());
+  }
+  {
+    typedef int& T;
+    std::promise<T> p;
+    std::shared_future<T> f = p.get_future();
+    std::thread(func3, std::move(p)).detach();
+    assert(f.valid());
+    assert(f.wait_for(ms(1)) == std::future_status::timeout);
+    assert(f.valid());
+    assert(f.wait_for(waitTime) == std::future_status::ready);
+    assert(f.valid());
+    f.wait();
+    assert(f.valid());
+  }
+  {
+    typedef void T;
+    std::promise<T> p;
+    std::shared_future<T> f = p.get_future();
+    std::thread(func5, std::move(p)).detach();
+    assert(f.valid());
+    assert(f.wait_for(ms(1)) == std::future_status::timeout);
+    assert(f.valid());
+    assert(f.wait_for(waitTime) == std::future_status::ready);
+    assert(f.valid());
+    f.wait();
+    assert(f.valid());
+  }
+
+  {
+    typedef int T;
+    std::promise<T> p;
+    std::shared_future<T> f = p.get_future();
+    Clock::time_point t0 = Clock::now();
+    std::thread(func1, std::move(p)).detach();
+    assert(f.valid());
+    assert(f.wait_for(ms(1)) == std::future_status::timeout);
+    assert(f.valid());
+    f.wait();
+    Clock::time_point t1 = Clock::now();
+    assert(f.valid());
+    assert(t1 - t0 >= sleepTime);
+    assert(f.wait_for(waitTime) == std::future_status::ready);
+    assert(f.valid());
+  }
+  {
+    typedef int& T;
+    std::promise<T> p;
+    std::shared_future<T> f = p.get_future();
+    Clock::time_point t0 = Clock::now();
+    std::thread(func3, std::move(p)).detach();
+    assert(f.valid());
+    assert(f.wait_for(ms(1)) == std::future_status::timeout);
+    assert(f.valid());
+    f.wait();
+    Clock::time_point t1 = Clock::now();
+    assert(f.valid());
+    assert(t1 - t0 >= sleepTime);
+    assert(f.wait_for(waitTime) == std::future_status::ready);
+    assert(f.valid());
+  }
+  {
+    typedef void T;
+    std::promise<T> p;
+    std::shared_future<T> f = p.get_future();
+    Clock::time_point t0 = Clock::now();
+    std::thread(func5, std::move(p)).detach();
+    assert(f.valid());
+    assert(f.wait_for(ms(1)) == std::future_status::timeout);
+    assert(f.valid());
+    f.wait();
+    Clock::time_point t1 = Clock::now();
+    assert(f.valid());
+    assert(t1 - t0 >= sleepTime);
+    assert(f.wait_for(waitTime) == std::future_status::ready);
+    assert(f.valid());
+  }
 
   return 0;
 }


        


More information about the libcxx-commits mailing list