File tree Expand file tree Collapse file tree 5 files changed +63
-56
lines changed
Expand file tree Collapse file tree 5 files changed +63
-56
lines changed Original file line number Diff line number Diff line change 1+ (library
2+ (name fiber_test)
3+ (libraries stdune fiber))
Original file line number Diff line number Diff line change 1+ open Stdune
2+ open Fiber.O
3+
4+ let printf = Printf. printf
5+
6+ let print pp = Format. printf " %a@." Pp. render_ignore_tags pp
7+
8+ let print_dyn dyn = print (Dyn. pp dyn)
9+
10+ module Scheduler : sig
11+ exception Never
12+
13+ val yield : unit -> unit Fiber .t
14+
15+ val run : 'a Fiber .t -> 'a
16+ end = struct
17+ let suspended = Queue. create ()
18+
19+ let yield () =
20+ let ivar = Fiber.Ivar. create () in
21+ Queue. push suspended ivar;
22+ Fiber.Ivar. read ivar
23+
24+ let rec restart_suspended () =
25+ if Queue. is_empty suspended then
26+ Fiber. return ()
27+ else
28+ let * () = Fiber.Ivar. fill (Queue. pop_exn suspended) () in
29+ restart_suspended ()
30+
31+ exception Never
32+
33+ let run t =
34+ match
35+ Fiber. run
36+ (let * result = Fiber. fork (fun () -> t) in
37+ let * () = restart_suspended () in
38+ Fiber.Ivar. peek result)
39+ with
40+ | None
41+ | Some None ->
42+ raise Never
43+ | Some (Some x ) -> x
44+ end
45+
46+ let test ?(expect_never = false ) to_dyn f =
47+ let never_raised = ref false in
48+ ( try Scheduler. run f |> to_dyn |> print_dyn
49+ with Scheduler. Never -> never_raised := true );
50+ match (! never_raised, expect_never) with
51+ | false , false ->
52+ (* We don't raise in this case b/c we assume something else is being tested *)
53+ ()
54+ | true , true -> print_endline " [PASS] Never raised as expected"
55+ | false , true ->
56+ print_endline " [FAIL] expected Never to be raised but it wasn't"
57+ | true , false -> print_endline " [FAIL] unexpected Never raised"
Original file line number Diff line number Diff line change 55 (inline_tests)
66 (libraries
77 fiber
8+ fiber_test
89 jsonrpc
910 fiber_unix
1011 stdune
Original file line number Diff line number Diff line change 11include Stdune
2+ include Fiber_test
23include Fiber.O
34include Dyn.Encoder
4-
5- let printf = Printf. printf
6-
7- let print pp = Format. printf " %a@." Pp. render_ignore_tags pp
8-
9- let print_dyn dyn = print (Dyn. pp dyn)
10-
11- module Scheduler : sig
12- exception Never
13-
14- val yield : unit -> unit Fiber .t
15-
16- val run : 'a Fiber .t -> 'a
17- end = struct
18- let suspended = Queue. create ()
19-
20- let yield () =
21- let ivar = Fiber.Ivar. create () in
22- Queue. push suspended ivar;
23- Fiber.Ivar. read ivar
24-
25- let rec restart_suspended () =
26- if Queue. is_empty suspended then
27- Fiber. return ()
28- else
29- let * () = Fiber.Ivar. fill (Queue. pop_exn suspended) () in
30- restart_suspended ()
31-
32- exception Never
33-
34- let run t =
35- match
36- Fiber. run
37- (let * result = Fiber. fork (fun () -> t) in
38- let * () = restart_suspended () in
39- Fiber.Ivar. peek result)
40- with
41- | None
42- | Some None ->
43- raise Never
44- | Some (Some x ) -> x
45- end
46-
47- let test ?(expect_never = false ) to_dyn f =
48- let never_raised = ref false in
49- ( try Scheduler. run f |> to_dyn |> print_dyn
50- with Scheduler. Never -> never_raised := true );
51- match (! never_raised, expect_never) with
52- | false , false ->
53- (* We don't raise in this case b/c we assume something else is being tested *)
54- ()
55- | true , true -> print_endline " [PASS] Never raised as expected"
56- | false , true ->
57- print_endline " [FAIL] expected Never to be raised but it wasn't"
58- | true , false -> print_endline " [FAIL] unexpected Never raised"
Original file line number Diff line number Diff line change @@ -174,6 +174,6 @@ let%expect_test "detached + timer" =
174174 (fun () -> Fiber_detached. run detached)
175175 in
176176 S. run s (Fiber. of_thunk run);
177- [% expect{|
177+ [% expect {|
178178 inside timer
179179 timer finished | }]
You can’t perform that action at this time.
0 commit comments