module E = Ephemeron ;; let test0 () = let f = E.create (fun () -> prerr_endline "OK") in try E.get f () with Not_found -> prerr_endline "WTF" ;; let test1 () = let f = E.create (fun () -> prerr_endline "OK") in Gc.full_major (); try E.get f () with Not_found -> prerr_endline "WTF" ;; let test2 () = let str = let f = E.create (fun () -> prerr_endline "WTF") in Marshal.to_string f [] in Gc.full_major (); let f : (unit -> unit) E.key = Marshal.from_string str 0 in try E.get f () with Not_found -> prerr_endline "OK" ;; let test3 () = let str = let f = E.create (fun () -> prerr_endline "WTF") in Marshal.to_string f [] in let f : (unit -> unit) E.key = Marshal.from_string str 0 in try E.get f () with Not_found -> prerr_endline "OK" ;; test0 ();; test1 ();; test2 ();; test3 ();;