summaryrefslogtreecommitdiff
path: root/test/ocaml/vec_32_64/vec_32_64.sail
blob: eb51851595bcef4fb58046ef2cd74f23b23831fd (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
26
27
28
(* This example is more testing the typechecker flow typing rather
than the ocaml backend, but it does test that recursive functions work
correctly *)

val get_size : unit -> {|32, 64|}

function get_size () = 32

val only64 = { ocaml: "(fun _ -> ())" } : bits(64) -> unit

val zeros : forall 'n. atom('n) -> vector('n - 1, 'n, dec, bit)

function zeros n =
  if (n == 1 + 0) then 0b0 else 0b0 @ zeros('n - 1)

val main : unit -> unit

function main () = {
  let 'length = get_size ();
  let xs = zeros(length);
  if (length == 32) then {
    ()
  } else {
    only64(xs)
  };
  print_bits("xs = ", xs);
  print_bits("zeros(64) = ", zeros(64))
}