From 3c4270b3a16306c6ab57c51023e79d3e13bcc660 Mon Sep 17 00:00:00 2001 From: Simon Cruanes Date: Sat, 1 Mar 2014 19:31:10 +0100 Subject: [PATCH] added a Conv.Point.t benchmark to bench_conv (recursive type) --- tests/bench_conv.ml | 40 ++++++++++++++++++++++++++++++++++++++-- 1 file changed, 38 insertions(+), 2 deletions(-) diff --git a/tests/bench_conv.ml b/tests/bench_conv.ml index 0209a59c..854288e6 100644 --- a/tests/bench_conv.ml +++ b/tests/bench_conv.ml @@ -1,4 +1,3 @@ - let conv_json = let src = Conv.Source.(list_ (pair int_ int_)) in fun x -> Conv.into src Conv.Json.sink x @@ -14,6 +13,43 @@ let bench_list x = ] in Benchmark.tabulate res +(** benchmark points *) +module Point = Conv.Point + +let rec point_to_json_manual p = + let module P = Point in + `Assoc + [ "x", `Int p.P.x + ; "y", `Int p.P.y + ; "color", `String p.P.color + ; "prev", (match p.P.prev with + | None -> `String "none" + | Some p' -> point_to_json_manual p') + ] + +let list_point_to_json_manual l = + `List (List.map point_to_json_manual l) + +let conv_list_point_to_json l = + Conv.into (Conv.Source.list_ Point.source) Conv.Json.sink l + +let bench_point_list x = + let res = Benchmark.throughputN 5 + [ "conv", conv_list_point_to_json, x + ; "manual", list_point_to_json_manual, x + ] in + Benchmark.tabulate res + + let () = Printf.printf "list of 5 elements...\n"; - bench_list [1,2; 3,4; 5,6; 7,8; 9,10] + bench_list [1,2; 3,4; 5,6; 7,8; 9,10]; + + let l = Gen.(1 -- 100 |> map (fun x->x,x) |> to_rev_list) in + Printf.printf "list of %d elements...\n" (List.length l); + bench_list l; + + let l = Gen.(repeat Point.p |> take 10 |> to_rev_list) in + Printf.printf "list of %d points...\n" (List.length l); + bench_point_list l; + ()