Skip to content

Commit a4c1f4f

Browse files
committed
Separate fiber test library
This library is useful on its own Signed-off-by: Rudi Grinberg <me@rgrinberg.com>
1 parent ebdb98d commit a4c1f4f

File tree

5 files changed

+63
-56
lines changed

5 files changed

+63
-56
lines changed

fiber-test/dune

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
(library
2+
(name fiber_test)
3+
(libraries stdune fiber))

fiber-test/fiber_test.ml

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
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"

fiber-unix/test/dune

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
(inline_tests)
66
(libraries
77
fiber
8+
fiber_test
89
jsonrpc
910
fiber_unix
1011
stdune

fiber-unix/test/import.ml

Lines changed: 1 addition & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -1,58 +1,4 @@
11
include Stdune
2+
include Fiber_test
23
include Fiber.O
34
include 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"

fiber-unix/test/scheduler_tests.ml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff 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 |}]

0 commit comments

Comments
 (0)