+++ /dev/null
-(* Very basic tests of Ancient module.
- * $Id: test_ancient.ml,v 1.1 2006-09-27 12:07:07 rich Exp $
- *)
-
-open Printf
-
-type item = {
- name : string;
- dob : string;
- address : string;
- phone : string option;
- marital_status : marital_status;
- id : int;
-}
-and marital_status = Single | Married | Divorced
-
-let gc_compact () =
- eprintf "compacting ... %!";
- Gc.compact ();
- let stat = Gc.stat () in
- let live_words = stat.Gc.live_words in
- eprintf "live words = %d (%d MB)\n%!"
- live_words (live_words * 8 / 1024 / 1024)
-
-let random_string () =
- let n = 1 + Random.int 20 in
- let str = String.create n in
- for i = 0 to n-1 do
- let c = 97 + Random.int 26 in
- let c = Char.chr c in
- str.[i] <- c
- done;
- str
-
-let random_string_option () =
- if Random.int 3 = 1 then None else Some (random_string ())
-
-let random_marital_status () =
- match Random.int 3 with
- | 0 -> Single
- | 1 -> Married
- | _ -> Divorced
-
-let rec output_data chan data =
- let n = Array.length data in
- for i = 0 to n-1; do
- output_item chan data.(i)
- done
-
-and output_item chan item =
- fprintf chan "id = %d\n%!" item.id;
- fprintf chan "\tname = %s\n%!" item.name;
- fprintf chan "\tdob = %s\n%!" item.dob;
- fprintf chan "\taddress = %s\n%!" item.address;
- fprintf chan "\tphone = %s\n%!"
- (match item.phone with
- | None -> "None"
- | Some str -> "Some " ^ str);
- fprintf chan "\tmarital_status = %s\n%!"
- (string_of_marital_status item.marital_status)
-
-and string_of_marital_status status =
- match status with
- | Single -> "Single"
- | Married -> "Married"
- | Divorced -> "Divorced"
-
-let () =
- eprintf "Before allocating data on OCaml heap ...\n";
- gc_compact ();
- let data =
- Array.init 100000 (
- fun id ->
- { id = id;
- name = random_string ();
- dob = random_string ();
- address = random_string ();
- phone = random_string_option ();
- marital_status = random_marital_status () }
- ) in
- eprintf "After allocating data on OCaml heap ...\n";
- gc_compact ();
-
- let chan = open_out "test_ancient.out1" in
- output_data chan data;
- close_out chan;
-
- let data = Ancient.mark data in
- eprintf "After marking data as ancient ...\n";
- gc_compact ();
-
- let data = Ancient.follow data in
- eprintf "Number of elements in array = %d\n" (Array.length data);
-
- let chan = open_out "test_ancient.out2" in
- output_data chan data;
- close_out chan;
-
- eprintf "After writing out ancient data ...\n";
- gc_compact ()