diff --git a/bench/replay.ml b/bench/replay.ml index cc30303..e827359 100644 --- a/bench/replay.ml +++ b/bench/replay.ml @@ -71,10 +71,11 @@ module Make (Cache : Cachecache.S.Cache with type key = K.t) = struct +. mtime stats counter (fun _ -> ignore (Cache.find_opt cache k)); stats.find <- stats.find + 1 | Mem k -> - let b = Cache.mem cache k in + let b = ref false in stats.mem_span <- - stats.mem_span +. mtime stats counter (fun _ -> ignore b); - if b then stats.hit <- stats.hit + 1 + stats.mem_span + +. mtime stats counter (fun _ -> b := Cache.mem cache k); + if !b then stats.hit <- stats.hit + 1 else stats.miss <- stats.miss + 1; stats.mem <- stats.mem + 1 | _ -> assert false) @@ -89,7 +90,7 @@ module Bench_lru = Make (Lru) module Bench_lfu = Make (Lfu) let () = - let t = [| 1000; 10000; 100000 |] in + let t = [| 1000; 10000; 100_000 |] in for _ = 0 to 2 do for i = 0 to Array.length t - 1 do Fmt.pr "cap = %d\n" t.(i); diff --git a/src/lfu.mli b/src/lfu.mli index 8f2daf7..9ce63ca 100644 --- a/src/lfu.mli +++ b/src/lfu.mli @@ -8,6 +8,9 @@ end) : sig type key = K.t val v : int -> 'a t + + (*@ t = v c + checks c > 0 *) val stats : 'a t -> Stats.t val is_empty : 'a t -> bool val capacity : 'a t -> int