1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
|
(* TEST *)
let size x = Obj.reachable_words (Obj.repr x)
let expect_size s x =
let i = size x in
if i <> s then
Printf.printf "size = %i; expected = %i\n%!" i s
type t =
| A of int
| B of t * t
let f () =
let x = Random.int 10 in
expect_size 0 42;
expect_size 2 [| x |];
expect_size 3 [| x; 0 |];
let a = A x in
expect_size 2 a;
expect_size 5 (B (a, a)); (* sharing *)
expect_size 7 (B (a, A (x + 1)));
let rec b = B (a, b) in (* cycle *)
expect_size 5 b;
print_endline "OK"
let () =
f ()
|