(* TEST *)

module Float_record : sig
  type t = private float;;

  val make : float -> t;;
  val from : t -> float;;

  type s = {f : t};;
end = struct
  type t = float;;

  let make f = f;;

  let from t = t;;

  type s = {f : t};;
end

module Float_array = struct
  let small_float_array x =
    [|1.;2.;3.|], x

  let longer_float_array x =
    [|1.;2.;3.;4.;5.;6.;7.;8.;9.;0.;
      1.;2.;3.;4.;5.;6.;7.;8.;9.;0.;
      1.;2.;3.;4.;5.;6.;7.;8.;9.;0.;
      1.;2.;3.;4.;5.;6.;7.;8.;9.;0.;|], x
end

let s = { Float_record.f = Float_record.make 1.0 };;

print_float (Float_record.from s.Float_record.f);;
print_newline ();;


let b = Float_array.small_float_array 12
let c = (Float_array.longer_float_array [@inlined]) 34

let print_array a =
  Array.iter (fun f ->
      print_float f;
      print_newline ()) a;
  print_newline ()

let () =
  print_array (fst b);
  print_array (fst c);
