moonpool/test/t_resource.ml
2023-11-08 09:41:57 -05:00

27 lines
698 B
OCaml

open! Moonpool
let ( let@ ) = ( @@ )
let with_pool ~kind () f =
match kind with
| `Fifo_pool -> Fifo_pool.with_ () f
| `Ws_pool -> Ws_pool.with_ () f
(* test proper resource handling *)
let run ~kind () =
let@ () = Trace_tef.with_setup () in
let a = Atomic.make 0 in
for _i = 1 to 1_000 do
let@ _sp = Trace.with_span ~__FILE__ ~__LINE__ "loop.step" in
(* give a chance to domains to die *)
if _i mod 100 = 0 then Thread.delay 0.8;
(* allocate a new pool at each iteration *)
let@ p = with_pool ~kind () in
Ws_pool.run_wait_block p (fun () -> Atomic.incr a)
done;
assert (Atomic.get a = 1_000)
let () =
run ~kind:`Ws_pool ();
run ~kind:`Fifo_pool ()