mirror of
https://github.com/c-cube/moonpool.git
synced 2025-12-05 19:00:33 -05:00
test
This commit is contained in:
parent
83ada948aa
commit
a127a4131a
2 changed files with 31 additions and 21 deletions
|
|
@ -22,8 +22,7 @@ start
|
||||||
1.4.2: cur fiber[4] is some: true
|
1.4.2: cur fiber[4] is some: true
|
||||||
1.4.3: res 4 = 4
|
1.4.3: res 4 = 4
|
||||||
2: main fiber done
|
2: main fiber done
|
||||||
3: other fib done
|
3: main fiber exited
|
||||||
4: main fiber exited
|
|
||||||
============
|
============
|
||||||
start
|
start
|
||||||
1: start fibers
|
1: start fibers
|
||||||
|
|
|
||||||
|
|
@ -52,31 +52,42 @@ let () =
|
||||||
let clock = ref TS.init in
|
let clock = ref TS.init in
|
||||||
let fib =
|
let fib =
|
||||||
F.spawn_top ~on:runner @@ fun () ->
|
F.spawn_top ~on:runner @@ fun () ->
|
||||||
|
let chan_progress = Chan.create () in
|
||||||
|
let chans = Array.init 5 (fun _ -> Chan.create ()) in
|
||||||
|
|
||||||
let subs =
|
let subs =
|
||||||
List.init 5 (fun i ->
|
List.init 5 (fun i ->
|
||||||
F.spawn ~protect:false @@ fun _n ->
|
F.spawn ~protect:false @@ fun _n ->
|
||||||
Thread.delay (float i *. 0.01);
|
Thread.delay (float i *. 0.01);
|
||||||
|
Chan.pop_await chans.(i);
|
||||||
|
Chan.push chan_progress i;
|
||||||
|
F.check_if_cancelled ();
|
||||||
i)
|
i)
|
||||||
in
|
in
|
||||||
|
|
||||||
F.spawn_ignore ~protect:false (fun _n ->
|
|
||||||
Thread.delay 0.4;
|
|
||||||
TS.tick clock;
|
|
||||||
logf !clock "other fib done");
|
|
||||||
|
|
||||||
logf (TS.tick_get clock) "wait for subs";
|
logf (TS.tick_get clock) "wait for subs";
|
||||||
List.iteri
|
|
||||||
(fun i f ->
|
F.spawn_ignore (fun () ->
|
||||||
let clock = ref (0 :: i :: !clock) in
|
for i = 0 to 4 do
|
||||||
logf !clock "await fiber %d" i;
|
Chan.push chans.(i) ();
|
||||||
logf (TS.tick_get clock) "cur fiber[%d] is some: %b" i
|
let i' = Chan.pop_await chan_progress in
|
||||||
(Option.is_some @@ F.Private_.get_cur ());
|
assert (i = i')
|
||||||
let res = F.await f in
|
done);
|
||||||
logf (TS.tick_get clock) "cur fiber[%d] is some: %b" i
|
|
||||||
(Option.is_some @@ F.Private_.get_cur ());
|
(let clock0 = !clock in
|
||||||
F.yield ();
|
List.iteri
|
||||||
logf (TS.tick_get clock) "res %d = %d" i res)
|
(fun i f ->
|
||||||
subs;
|
let clock = ref (0 :: i :: clock0) in
|
||||||
|
logf !clock "await fiber %d" i;
|
||||||
|
logf (TS.tick_get clock) "cur fiber[%d] is some: %b" i
|
||||||
|
(Option.is_some @@ F.Private_.get_cur ());
|
||||||
|
let res = F.await f in
|
||||||
|
logf (TS.tick_get clock) "cur fiber[%d] is some: %b" i
|
||||||
|
(Option.is_some @@ F.Private_.get_cur ());
|
||||||
|
F.yield ();
|
||||||
|
logf (TS.tick_get clock) "res %d = %d" i res)
|
||||||
|
subs);
|
||||||
|
|
||||||
logf (TS.tick_get clock) "main fiber done"
|
logf (TS.tick_get clock) "main fiber done"
|
||||||
in
|
in
|
||||||
|
|
||||||
|
|
@ -104,8 +115,9 @@ let () =
|
||||||
|
|
||||||
logf (TS.tick_get clock) "start fibers";
|
logf (TS.tick_get clock) "start fibers";
|
||||||
let subs =
|
let subs =
|
||||||
|
let clock0 = !clock in
|
||||||
List.init 10 (fun i ->
|
List.init 10 (fun i ->
|
||||||
let clock = ref (0 :: i :: !clock) in
|
let clock = ref (0 :: i :: clock0) in
|
||||||
F.spawn ~protect:false @@ fun _n ->
|
F.spawn ~protect:false @@ fun _n ->
|
||||||
let@ () =
|
let@ () =
|
||||||
F.with_on_self_cancel (fun _ ->
|
F.with_on_self_cancel (fun _ ->
|
||||||
|
|
@ -123,7 +135,6 @@ let () =
|
||||||
);
|
);
|
||||||
|
|
||||||
F.check_if_cancelled ();
|
F.check_if_cancelled ();
|
||||||
|
|
||||||
i)
|
i)
|
||||||
in
|
in
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue