summaryrefslogtreecommitdiff
path: root/test/Moretest/globroots.ml
blob: 4d1ba4d4a56939bb76ed8217fc3d4d9de7efb15e (plain)
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
type t

external register: string -> t = "gb_register"
external get: t -> string = "gb_get"
external remove: t -> unit = "gb_remove"

let size = 1024

let _ =
  let a = Array.init size (fun i -> register (string_of_int i)) in
  while true do
    (* Check data *)
    for i = 0 to size - 1 do
      if get a.(i) <> string_of_int i then begin
        print_string "Error on "; print_int i; print_string ": ";
        print_string (String.escaped (get a.(i))); print_newline()
      end
    done;
    (* Change it randomly *)
    let i = Random.int size in
    remove a.(i);
    a.(i) <- register (string_of_int i);
    Gc.full_major();
    print_string "."; flush stdout
  done