51 lines
1.8 KiB
OCaml
51 lines
1.8 KiB
OCaml
(***********************************************************************)
|
|
(* *)
|
|
(* OCaml *)
|
|
(* *)
|
|
(* Xavier Leroy, projet Cristal, INRIA Rocquencourt *)
|
|
(* *)
|
|
(* Copyright 1996 Institut National de Recherche en Informatique et *)
|
|
(* en Automatique. All rights reserved. This file is distributed *)
|
|
(* under the terms of the Q Public License version 1.0. *)
|
|
(* *)
|
|
(***********************************************************************)
|
|
|
|
(* Recursive value definitions *)
|
|
|
|
let _ =
|
|
let rec x = 1 :: x in
|
|
if match x with
|
|
1 :: x' -> x == x'
|
|
| _ -> false
|
|
then print_string "Test 1: passed\n"
|
|
else print_string "Test 1: FAILED\n";
|
|
let one = 1 in
|
|
let rec y = (one, one+1) :: y in
|
|
if match y with
|
|
(1,2) :: y' -> y == y'
|
|
| _ -> false
|
|
then print_string "Test 2: passed\n"
|
|
else print_string "Test 2: FAILED\n";
|
|
let rec z = (Gc.minor(); (one, one+1)) :: z in
|
|
(* Trash the minor generation *)
|
|
for i = 0 to 50000 do ignore (ref 0) done;
|
|
if match z with
|
|
(1,2) :: z' -> z == z'
|
|
| _ -> false
|
|
then print_string "Test 3: passed\n"
|
|
else print_string "Test 3: FAILED\n";
|
|
;;
|
|
|
|
let rec s = "bar"
|
|
and idx = 1
|
|
and x1 = let f x = Printf.printf "%s\n" x in f "foo"; s, x4
|
|
and x2 = [| x1; x1 |]
|
|
and x3 = (fun () -> fst (x2.(idx))) :: x3
|
|
and x4 = {contents = x3}
|
|
;;
|
|
|
|
Gc.minor ();;
|
|
if (List.hd (!(snd (x2.(0))))) () == s
|
|
then print_string "Test 4: passed\n"
|
|
else print_string "Test 4: FAILED\n"
|