diff options
Diffstat (limited to 'tests/hol4/external/external_FunsScript.sml')
-rw-r--r-- | tests/hol4/external/external_FunsScript.sml | 108 |
1 files changed, 108 insertions, 0 deletions
diff --git a/tests/hol4/external/external_FunsScript.sml b/tests/hol4/external/external_FunsScript.sml new file mode 100644 index 00000000..f3692ee2 --- /dev/null +++ b/tests/hol4/external/external_FunsScript.sml @@ -0,0 +1,108 @@ +(** THIS FILE WAS AUTOMATICALLY GENERATED BY AENEAS *) +(** [external]: function definitions *) +open primitivesLib divDefLib +open external_TypesTheory external_OpaqueTheory + +val _ = new_theory "external_Funs" + + +val swap_fwd_def = Define ‘ + (** [external::swap]: forward function *) + swap_fwd (x : 't) (y : 't) (st : state) : (state # unit) result = + do + (st0, _) <- core_mem_swap_fwd x y st; + (st1, _) <- core_mem_swap_back0 x y st st0; + (st2, _) <- core_mem_swap_back1 x y st st1; + Return (st2, ()) + od +’ + +val swap_back_def = Define ‘ + (** [external::swap]: backward function 0 *) + swap_back + (x : 't) (y : 't) (st : state) (st0 : state) : (state # ('t # 't)) result = + do + (st1, _) <- core_mem_swap_fwd x y st; + (st2, x0) <- core_mem_swap_back0 x y st st1; + (_, y0) <- core_mem_swap_back1 x y st st2; + Return (st0, (x0, y0)) + od +’ + +val test_new_non_zero_u32_fwd_def = Define ‘ + (** [external::test_new_non_zero_u32]: forward function *) + test_new_non_zero_u32_fwd + (x : u32) (st : state) : (state # core_num_nonzero_non_zero_u32_t) result = + do + (st0, opt) <- core_num_nonzero_non_zero_u32_new_fwd x st; + core_option_option_unwrap_fwd opt st0 + od +’ + +val test_vec_fwd_def = Define ‘ + (** [external::test_vec]: forward function *) + test_vec_fwd : unit result = + let v = vec_new in do + _ <- vec_push_back v (int_to_u32 0); + Return () + od +’ + +(** Unit test for [external::test_vec] *) +val _ = assert_return (“test_vec_fwd”) + +val custom_swap_fwd_def = Define ‘ + (** [external::custom_swap]: forward function *) + custom_swap_fwd (x : 't) (y : 't) (st : state) : (state # 't) result = + do + (st0, _) <- core_mem_swap_fwd x y st; + (st1, x0) <- core_mem_swap_back0 x y st st0; + (st2, _) <- core_mem_swap_back1 x y st st1; + Return (st2, x0) + od +’ + +val custom_swap_back_def = Define ‘ + (** [external::custom_swap]: backward function 0 *) + custom_swap_back + (x : 't) (y : 't) (st : state) (ret : 't) (st0 : state) : + (state # ('t # 't)) result + = + do + (st1, _) <- core_mem_swap_fwd x y st; + (st2, _) <- core_mem_swap_back0 x y st st1; + (_, y0) <- core_mem_swap_back1 x y st st2; + Return (st0, (ret, y0)) + od +’ + +val test_custom_swap_fwd_def = Define ‘ + (** [external::test_custom_swap]: forward function *) + test_custom_swap_fwd + (x : u32) (y : u32) (st : state) : (state # unit) result = + do + (st0, _) <- custom_swap_fwd x y st; + Return (st0, ()) + od +’ + +val test_custom_swap_back_def = Define ‘ + (** [external::test_custom_swap]: backward function 0 *) + test_custom_swap_back + (x : u32) (y : u32) (st : state) (st0 : state) : + (state # (u32 # u32)) result + = + custom_swap_back x y st (int_to_u32 1) st0 +’ + +val test_swap_non_zero_fwd_def = Define ‘ + (** [external::test_swap_non_zero]: forward function *) + test_swap_non_zero_fwd (x : u32) (st : state) : (state # u32) result = + do + (st0, _) <- swap_fwd x (int_to_u32 0) st; + (st1, (x0, _)) <- swap_back x (int_to_u32 0) st st0; + if x0 = int_to_u32 0 then Fail Failure else Return (st1, x0) + od +’ + +val _ = export_theory () |