summaryrefslogtreecommitdiff
path: root/test/ocaml/vec_32_64/vec_32_64.sail
blob: 60fa0e460e37937cf6ff496c0fb881ece2fb9a6f (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, 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))
}