package async_unix

  1. Overview
  2. Docs
Legend:
Page
Library
Module
Module type
Parameter
Class
Class type
Source

Source file time_source_tests.ml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
open! Core
open! Import
module Time_source = Async_kernel.Time_source

let run_cycles_until_no_jobs_remain = Kernel_scheduler.run_cycles_until_no_jobs_remain

let%bench_module "Clock.every" =
  (module struct
    let scheduler = Kernel_scheduler.t ()
    let time_source = scheduler.time_source |> Time_source.of_synchronous

    let%bench "~continue-on-error:false" =
      let iv = Ivar.create () in
      let n = ref 0 in
      Time_source.run_repeatedly
        time_source
        ~stop:(Ivar.read iv)
        ~continue_on_error:false
        ~f:(fun () ->
          if !n >= 1_000 then Ivar.fill iv () else incr n;
          return ())
        ~continue:Time_source.Continue.immediately;
      run_cycles_until_no_jobs_remain ()
    ;;

    let%bench "~continue_on_error:true" =
      let iv = Ivar.create () in
      let n = ref 0 in
      Time_source.run_repeatedly
        time_source
        ~stop:(Ivar.read iv)
        ~continue_on_error:true
        ~f:(fun () ->
          if !n >= 1_000 then Ivar.fill iv () else incr n;
          return ())
        ~continue:Time_source.Continue.immediately;
      run_cycles_until_no_jobs_remain ()
    ;;
  end)
;;
OCaml

Innovation. Community. Security.