diff --git a/test/dune b/test/dune index 43955ec6..5c5e6427 100644 --- a/test/dune +++ b/test/dune @@ -11,6 +11,7 @@ t_resource t_unfair t_ws_deque + t_ws_wait t_bounded_queue) (libraries moonpool diff --git a/test/t_ws_wait.ml b/test/t_ws_wait.ml new file mode 100644 index 00000000..263a3e90 --- /dev/null +++ b/test/t_ws_wait.ml @@ -0,0 +1,21 @@ +open! Moonpool + +let ( let@ ) = ( @@ ) + +let () = + let sum = Atomic.make 0 in + let n = 300_000 in + + (let@ pool = Ws_pool.with_ ~num_threads:30 () in + for _i = 1 to n do + Runner.run_async pool (fun () -> + Thread.yield (); + ignore (Atomic.fetch_and_add sum 20 : int)) + done; + Runner.shutdown pool); + + (* make sure that shutdown didn't terminate before + all tasks were run *) + let sum = Atomic.get sum in + assert (sum = 20 * n); + ()