type t external create : int -> t = "ml_test_create" external compute : t -> int -> int = "ml_test_compute" external destroy : t -> unit = "ml_test_destroy" let pr fmt = Printf.ksprintf print_endline fmt let f () = let t = create 20 in pr "compute(20+4) = %d" (compute t 4); pr "compute(20+5) = %d" (compute t 5); () let () = let t = create 10 in pr "compute(10+4) = %d" (compute t 4); f (); pr "compute(10+5) = %d" (compute t 5); pr "compact"; Gc.compact (); pr "compact done"; pr "compute(10+6) = %d" (compute t 6); destroy t; pr "destroy second time"; destroy t; pr "should raise invalid_arg now"; ignore (compute t 1)