File: tak.ml

package info (click to toggle)
ocaml 5.4.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 44,372 kB
  • sloc: ml: 370,196; ansic: 52,820; sh: 27,419; asm: 5,462; makefile: 3,684; python: 974; awk: 278; javascript: 273; perl: 59; fortran: 21; cs: 9
file content (19 lines) | stat: -rw-r--r-- 437 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
(* TEST *)

(* filling minor heaps in parallel to trigger
   minor heap exhaustion codepath organically *)

let rec tak (x, y, z as _tuple) =
  if x > y then tak(tak (x-1, y, z), tak (y-1, z, x), tak (z-1, x, y))
  else z

let work () =
  for _ = 1 to 100 do
    assert (7 = tak (18, 12, 6));
  done

let _ =
  let a = Array.init 4 (fun _ -> Domain.spawn work) in
  work ();
  Array.iter (fun d -> Domain.join d) a;
  print_endline "OK"