let benchmark_01 (module Test_db : TEST_DATABASE) uri_string     ?(collection = 200) ?(big_string_kb = 10) () =   let open Test_db in   let open Trakeva.Action in   let benches = ref [] in   let add_bench s t = benches := (s, t) :: !benches in   DB.load uri_string   >>= fun db ->   let bench_function s f =     let b = Test.now () in     f ()     >>= fun x ->     let e = Test.now () in     add_bench s (e -. b);     return x   in   let bench_action ~action s =     bench_function s (fun () -> DB.act db ~action:(seq action)) in   let action =     List.init collection (fun i ->         set ~key:(sprintf "k%d" i) ~collection:"c" "small")   in   bench_action ~action (sprintf "%d small strings" collection)   >>= fun _ ->   let bench_in_collection name =     bench_action       (sprintf "Set %d %d KB strings into %s" collection big_string_kb name)       ~action:(         List.init collection (fun i ->             let value = String.make (big_string_kb * 1_000) 'B' in             set ~key:(sprintf "k%d" i) ~collection:name value))     >>= fun _ ->     bench_function (sprintf "Get all collection %s" name)       (fun () -> DB.get_all db name)     >>= fun cc ->     let l = List.length cc in     Test.check ["bench01""length"; name; Int.to_string l] (l = collection);     bench_function (sprintf "Iterate on all collection %s" name)       (fun () ->          let iter = DB.iterator db ~collection:name in          let rec loop () =            iter ()            >>= function            | Some obj -> loop ()            | None -> return ()          in          loop ())     >>= fun () ->     bench_function (sprintf "Get all %s one by one" name)       (fun () ->          let rec loop n =            if n = 0            then return ()            else (              let key = sprintf "k%d" (n - 1) in              DB.get ~collection:name  db ~key              >>= fun v ->              Test.check ["bench01"; key; "not none"; ] (v <> None);              loop (n - 1)            )          in          loop collection)     >>= fun _ ->     return ()   in   bench_in_collection "C1" >>= fun () ->   bench_in_collection "C2" >>= fun () ->   bench_in_collection "C3" >>= fun () ->   bench_in_collection "C3" >>= fun () ->   DB.close db   >>= fun () ->   return (test_name, List.rev !benches)