@@ -54,7 +54,38 @@ void test_threadpool_async(ThreadpoolType& tp, const size_t task_num){
5454 for (size_t i=0 ; i<int_future.size (); i++){
5555 CHECK (int_future[i].get () == int_result[i]);
5656 }
57-
57+ }
58+
59+ template <typename ThreadpoolType>
60+ void test_threadpool_wait_for_all (ThreadpoolType& tp){
61+
62+ const size_t worker_num = tp.num_workers ();
63+ const size_t task_num = 20 ;
64+ std::atomic<size_t > counter{0 };
65+
66+ for (size_t i=0 ; i<task_num; i++){
67+ tp.silent_async ([&counter](){
68+ std::this_thread::sleep_for (std::chrono::milliseconds (200 ));
69+ counter++;
70+ });
71+ }
72+ CHECK (counter < task_num);
73+ // std::cout << "counter: " << counter << std::endl;
74+
75+ tp.shutdown ();
76+ tp.spawn (worker_num);
77+
78+ counter = 0 ;
79+ for (size_t i=0 ; i<task_num; i++){
80+ tp.silent_async ([&counter](){
81+ std::this_thread::sleep_for (std::chrono::milliseconds (200 ));
82+ counter++;
83+ });
84+ }
85+ tp.wait_for_all ();
86+ // std::cout << "counter:" << counter << std::endl;
87+ CHECK (counter == task_num);
88+
5889}
5990
6091// --------------------------------------------------------
@@ -76,5 +107,10 @@ TEST_CASE("Threadpool.ProactiveThreadpool" * doctest::timeout(5)) {
76107 test_threadpool_silent_async (tp, task_num);
77108 }
78109
110+ SUBCASE (" WaitForAll" ){
111+ tf::ProactiveThreadpool tp (4 );
112+ test_threadpool_wait_for_all (tp);
113+ }
114+
79115}
80116
0 commit comments