summaryrefslogtreecommitdiff
path: root/tests/fstar-split/misc/External.Funs.fst
blob: 3b84697e7cae7d3a3608f6df47456445f680fbc3 (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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
(** THIS FILE WAS AUTOMATICALLY GENERATED BY AENEAS *)
(** [external]: function definitions *)
module External.Funs
open Primitives
include External.Types
include External.FunsExternal

#set-options "--z3rlimit 50 --fuel 1 --ifuel 1"

(** [external::swap]: forward function
    Source: 'src/external.rs', lines 6:0-6:46 *)
let swap (t : Type0) (x : t) (y : t) (st : state) : result (state & unit) =
  let* (st1, _) = core_mem_swap t x y st in
  let* (st2, _) = core_mem_swap_back0 t x y st st1 in
  let* (st3, _) = core_mem_swap_back1 t x y st st2 in
  Return (st3, ())

(** [external::swap]: backward function 0
    Source: 'src/external.rs', lines 6:0-6:46 *)
let swap_back
  (t : Type0) (x : t) (y : t) (st : state) (st1 : state) :
  result (state & (t & t))
  =
  let* (st2, _) = core_mem_swap t x y st in
  let* (st3, x1) = core_mem_swap_back0 t x y st st2 in
  let* (_, y1) = core_mem_swap_back1 t x y st st3 in
  Return (st1, (x1, y1))

(** [external::test_new_non_zero_u32]: forward function
    Source: 'src/external.rs', lines 11:0-11:60 *)
let test_new_non_zero_u32
  (x : u32) (st : state) : result (state & core_num_nonzero_NonZeroU32_t) =
  let* (st1, o) = core_num_nonzero_NonZeroU32_new x st in
  core_option_Option_unwrap core_num_nonzero_NonZeroU32_t o st1

(** [external::test_vec]: forward function
    Source: 'src/external.rs', lines 17:0-17:17 *)
let test_vec : result unit =
  let v = alloc_vec_Vec_new u32 in
  let* _ = alloc_vec_Vec_push u32 v 0 in
  Return ()

(** Unit test for [external::test_vec] *)
let _ = assert_norm (test_vec = Return ())

(** [external::custom_swap]: forward function
    Source: 'src/external.rs', lines 24:0-24:66 *)
let custom_swap (t : Type0) (x : t) (y : t) (st : state) : result (state & t) =
  let* (st1, _) = core_mem_swap t x y st in
  let* (st2, x1) = core_mem_swap_back0 t x y st st1 in
  let* (st3, _) = core_mem_swap_back1 t x y st st2 in
  Return (st3, x1)

(** [external::custom_swap]: backward function 0
    Source: 'src/external.rs', lines 24:0-24:66 *)
let custom_swap_back
  (t : Type0) (x : t) (y : t) (st : state) (ret : t) (st1 : state) :
  result (state & (t & t))
  =
  let* (st2, _) = core_mem_swap t x y st in
  let* (st3, _) = core_mem_swap_back0 t x y st st2 in
  let* (_, y1) = core_mem_swap_back1 t x y st st3 in
  Return (st1, (ret, y1))

(** [external::test_custom_swap]: forward function
    Source: 'src/external.rs', lines 29:0-29:59 *)
let test_custom_swap (x : u32) (y : u32) (st : state) : result (state & unit) =
  let* (st1, _) = custom_swap u32 x y st in Return (st1, ())

(** [external::test_custom_swap]: backward function 0
    Source: 'src/external.rs', lines 29:0-29:59 *)
let test_custom_swap_back
  (x : u32) (y : u32) (st : state) (st1 : state) :
  result (state & (u32 & u32))
  =
  custom_swap_back u32 x y st 1 st1

(** [external::test_swap_non_zero]: forward function
    Source: 'src/external.rs', lines 35:0-35:44 *)
let test_swap_non_zero (x : u32) (st : state) : result (state & u32) =
  let* (st1, _) = swap u32 x 0 st in
  let* (st2, (x1, _)) = swap_back u32 x 0 st st1 in
  if x1 = 0 then Fail Failure else Return (st2, x1)