59 lines
1.7 KiB
OCaml
59 lines
1.7 KiB
OCaml
(* This file is part of Lwt, released under the MIT license. See LICENSE.md for
|
|
details, or visit https://github.com/ocsigen/lwt/blob/master/LICENSE.md. *)
|
|
|
|
|
|
|
|
open Test
|
|
open Lwt.Infix
|
|
|
|
let timing_tests = [
|
|
test "libev: timer delays are not too short" begin fun () ->
|
|
let start = Unix.gettimeofday () in
|
|
|
|
Lwt.catch
|
|
(fun () ->
|
|
(* Block the entire process for one second. If using libev, libev's
|
|
notion of the current time is not updated during this period. *)
|
|
let () = Unix.sleep 1 in
|
|
|
|
(* At this point, libev thinks that the time is what it was about one
|
|
second ago. Now schedule exception Lwt_unix.Timeout to be raised in
|
|
0.5 seconds. If the implementation is incorrect, the exception will
|
|
be raised immediately, because the 0.5 seconds will be measured
|
|
relative to libev's "current" time of one second ago. *)
|
|
Lwt_unix.timeout 0.5)
|
|
|
|
(function
|
|
| Lwt_unix.Timeout ->
|
|
Lwt.return (Unix.gettimeofday ())
|
|
| exn ->
|
|
Lwt.reraise exn)
|
|
|
|
>>= fun stop ->
|
|
|
|
Lwt.return (stop -. start >= 1.5)
|
|
end;
|
|
]
|
|
|
|
let tests = timing_tests
|
|
|
|
let run_tests = [
|
|
test "Lwt_main.run: nested call" ~sequential:true begin fun () ->
|
|
(* The test itself is already running under Lwt_main.run, so we just have to
|
|
call it once and make sure we get an exception. *)
|
|
|
|
(* Make sure we are running in a callback called by Lwt_main.run, not
|
|
synchronously when the testing executable is loaded. *)
|
|
Lwt.pause () >>= fun () ->
|
|
|
|
try
|
|
Lwt_main.run (Lwt.return_unit);
|
|
Lwt.return_false
|
|
with Failure _ ->
|
|
Lwt.return_true
|
|
end;
|
|
]
|
|
|
|
let tests = tests @ run_tests
|
|
|
|
let suite = suite "lwt_engine" tests
|