This commit is contained in:
parent
aa2ff7b2f0
commit
2f3113f55d
11742 changed files with 1223940 additions and 0 deletions
105
unikernel/duniverse/sexplib0/bench/bench_record.ml
Normal file
105
unikernel/duniverse/sexplib0/bench/bench_record.ml
Normal file
|
|
@ -0,0 +1,105 @@
|
|||
open Sexplib0.Sexp_conv
|
||||
|
||||
let bench_t_of_sexp ~t_of_sexp string =
|
||||
let sexp = Sys.opaque_identity (Parsexp.Single.parse_string_exn string) in
|
||||
fun () -> t_of_sexp sexp
|
||||
;;
|
||||
|
||||
type t =
|
||||
{ a : int
|
||||
; b : int option
|
||||
; c : bool
|
||||
; d : int array
|
||||
; e : int list
|
||||
; f : int option
|
||||
; g : int
|
||||
; h : 'a. 'a list
|
||||
}
|
||||
|
||||
let t_of_sexp =
|
||||
let open struct
|
||||
type poly = { h : 'a. 'a list } [@@unboxed]
|
||||
end in
|
||||
Sexplib0.Sexp_conv_record.record_of_sexp
|
||||
~caller:"Record.t"
|
||||
~fields:
|
||||
(Field
|
||||
{ name = "a"
|
||||
; kind = Required
|
||||
; conv = int_of_sexp
|
||||
; rest =
|
||||
Field
|
||||
{ name = "b"
|
||||
; kind = Omit_nil
|
||||
; conv = option_of_sexp int_of_sexp
|
||||
; rest =
|
||||
Field
|
||||
{ name = "c"
|
||||
; kind = Sexp_bool
|
||||
; conv = ()
|
||||
; rest =
|
||||
Field
|
||||
{ name = "d"
|
||||
; kind = Sexp_array
|
||||
; conv = int_of_sexp
|
||||
; rest =
|
||||
Field
|
||||
{ name = "e"
|
||||
; kind = Sexp_list
|
||||
; conv = int_of_sexp
|
||||
; rest =
|
||||
Field
|
||||
{ name = "f"
|
||||
; kind = Sexp_option
|
||||
; conv = int_of_sexp
|
||||
; rest =
|
||||
Field
|
||||
{ name = "g"
|
||||
; kind = Default (fun () -> 0)
|
||||
; conv = int_of_sexp
|
||||
; rest =
|
||||
Field
|
||||
{ name = "h"
|
||||
; kind = Required
|
||||
; conv =
|
||||
(fun sexp ->
|
||||
{ h =
|
||||
list_of_sexp
|
||||
(Sexplib0.Sexp_conv_error
|
||||
.record_poly_field_value
|
||||
"Record.t")
|
||||
sexp
|
||||
})
|
||||
; rest = Empty
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
~index_of_field:(function
|
||||
| "a" -> 0
|
||||
| "b" -> 1
|
||||
| "c" -> 2
|
||||
| "d" -> 3
|
||||
| "e" -> 4
|
||||
| "f" -> 5
|
||||
| "g" -> 6
|
||||
| "h" -> 7
|
||||
| _ -> -1)
|
||||
~allow_extra_fields:false
|
||||
~create:(fun (a, (b, (c, (d, (e, (f, (g, ({ h }, ())))))))) ->
|
||||
{ a; b; c; d; e; f; g; h })
|
||||
;;
|
||||
|
||||
let%bench_fun "t_of_sexp, full, in order" =
|
||||
bench_t_of_sexp ~t_of_sexp "((a 1) (b (2)) (c) (d (3 4)) (e (5 6)) (f 7) (g 8) (h ()))"
|
||||
;;
|
||||
|
||||
let%bench_fun "t_of_sexp, full, reverse order" =
|
||||
bench_t_of_sexp ~t_of_sexp "((h ()) (g 8) (f 7) (e (5 6)) (d (3 4)) (c) (b (2)) (a 1))"
|
||||
;;
|
||||
|
||||
let%bench_fun "t_of_sexp, empty" = bench_t_of_sexp ~t_of_sexp "((a 0) (h ()))"
|
||||
Loading…
Add table
Add a link
Reference in a new issue