diff options
author | Aymeric Fromherz | 2024-05-30 12:33:05 +0200 |
---|---|---|
committer | Aymeric Fromherz | 2024-05-30 12:33:05 +0200 |
commit | ce8614be6bd96c51756bf5922b5dfd4c59650dd4 (patch) | |
tree | 3e9f59719c0f7cd344649ac87af0f04f1ad28147 /tests/fstar/hashmap | |
parent | 96d803a7aefe27d4401a336c426161d387987b63 (diff) |
Implement two phases of loops join + collapse
Diffstat (limited to 'tests/fstar/hashmap')
-rw-r--r-- | tests/fstar/hashmap/Hashmap.Clauses.Template.fst | 56 | ||||
-rw-r--r-- | tests/fstar/hashmap/Hashmap.Funs.fst | 154 |
2 files changed, 8 insertions, 202 deletions
diff --git a/tests/fstar/hashmap/Hashmap.Clauses.Template.fst b/tests/fstar/hashmap/Hashmap.Clauses.Template.fst index b96f6784..5effb67a 100644 --- a/tests/fstar/hashmap/Hashmap.Clauses.Template.fst +++ b/tests/fstar/hashmap/Hashmap.Clauses.Template.fst @@ -13,59 +13,3 @@ let hashMap_allocate_slots_loop_decreases (t : Type0) (slots : alloc_vec_Vec (list_t t)) (n : usize) : nat = admit () -(** [hashmap::{hashmap::HashMap<T>}::clear]: decreases clause - Source: 'tests/src/hashmap.rs', lines 80:4-88:5 *) -unfold -let hashMap_clear_loop_decreases (t : Type0) (slots : alloc_vec_Vec (list_t t)) - (i : usize) : nat = - admit () - -(** [hashmap::{hashmap::HashMap<T>}::insert_in_list]: decreases clause - Source: 'tests/src/hashmap.rs', lines 97:4-114:5 *) -unfold -let hashMap_insert_in_list_loop_decreases (t : Type0) (key : usize) (value : t) - (ls : list_t t) : nat = - admit () - -(** [hashmap::{hashmap::HashMap<T>}::move_elements_from_list]: decreases clause - Source: 'tests/src/hashmap.rs', lines 183:4-196:5 *) -unfold -let hashMap_move_elements_from_list_loop_decreases (t : Type0) - (ntable : hashMap_t t) (ls : list_t t) : nat = - admit () - -(** [hashmap::{hashmap::HashMap<T>}::move_elements]: decreases clause - Source: 'tests/src/hashmap.rs', lines 171:4-180:5 *) -unfold -let hashMap_move_elements_loop_decreases (t : Type0) (ntable : hashMap_t t) - (slots : alloc_vec_Vec (list_t t)) (i : usize) : nat = - admit () - -(** [hashmap::{hashmap::HashMap<T>}::contains_key_in_list]: decreases clause - Source: 'tests/src/hashmap.rs', lines 206:4-219:5 *) -unfold -let hashMap_contains_key_in_list_loop_decreases (t : Type0) (key : usize) - (ls : list_t t) : nat = - admit () - -(** [hashmap::{hashmap::HashMap<T>}::get_in_list]: decreases clause - Source: 'tests/src/hashmap.rs', lines 224:4-237:5 *) -unfold -let hashMap_get_in_list_loop_decreases (t : Type0) (key : usize) - (ls : list_t t) : nat = - admit () - -(** [hashmap::{hashmap::HashMap<T>}::get_mut_in_list]: decreases clause - Source: 'tests/src/hashmap.rs', lines 245:4-254:5 *) -unfold -let hashMap_get_mut_in_list_loop_decreases (t : Type0) (ls : list_t t) - (key : usize) : nat = - admit () - -(** [hashmap::{hashmap::HashMap<T>}::remove_from_list]: decreases clause - Source: 'tests/src/hashmap.rs', lines 265:4-291:5 *) -unfold -let hashMap_remove_from_list_loop_decreases (t : Type0) (key : usize) - (ls : list_t t) : nat = - admit () - diff --git a/tests/fstar/hashmap/Hashmap.Funs.fst b/tests/fstar/hashmap/Hashmap.Funs.fst index 2aca9fbe..638cd66f 100644 --- a/tests/fstar/hashmap/Hashmap.Funs.fst +++ b/tests/fstar/hashmap/Hashmap.Funs.fst @@ -58,59 +58,23 @@ let hashMap_new_with_capacity let hashMap_new (t : Type0) : result (hashMap_t t) = hashMap_new_with_capacity t 32 4 5 -(** [hashmap::{hashmap::HashMap<T>}::clear]: loop 0: - Source: 'tests/src/hashmap.rs', lines 80:4-88:5 *) -let rec hashMap_clear_loop - (t : Type0) (slots : alloc_vec_Vec (list_t t)) (i : usize) : - Tot (result (alloc_vec_Vec (list_t t))) - (decreases (hashMap_clear_loop_decreases t slots i)) - = - let i1 = alloc_vec_Vec_len (list_t t) slots in - if i < i1 - then - let* (_, index_mut_back) = - alloc_vec_Vec_index_mut (list_t t) usize - (core_slice_index_SliceIndexUsizeSliceTInst (list_t t)) slots i in - let* i2 = usize_add i 1 in - let* slots1 = index_mut_back List_Nil in - hashMap_clear_loop t slots1 i2 - else Ok slots - (** [hashmap::{hashmap::HashMap<T>}::clear]: Source: 'tests/src/hashmap.rs', lines 80:4-80:27 *) let hashMap_clear (t : Type0) (self : hashMap_t t) : result (hashMap_t t) = - let* hm = hashMap_clear_loop t self.slots 0 in - Ok { self with num_entries = 0; slots = hm } + admit (** [hashmap::{hashmap::HashMap<T>}::len]: Source: 'tests/src/hashmap.rs', lines 90:4-90:30 *) let hashMap_len (t : Type0) (self : hashMap_t t) : result usize = Ok self.num_entries -(** [hashmap::{hashmap::HashMap<T>}::insert_in_list]: loop 0: - Source: 'tests/src/hashmap.rs', lines 97:4-114:5 *) -let rec hashMap_insert_in_list_loop - (t : Type0) (key : usize) (value : t) (ls : list_t t) : - Tot (result (bool & (list_t t))) - (decreases (hashMap_insert_in_list_loop_decreases t key value ls)) - = - begin match ls with - | List_Cons ckey cvalue tl -> - if ckey = key - then Ok (false, List_Cons ckey value tl) - else - let* (b, tl1) = hashMap_insert_in_list_loop t key value tl in - Ok (b, List_Cons ckey cvalue tl1) - | List_Nil -> Ok (true, List_Cons key value List_Nil) - end - (** [hashmap::{hashmap::HashMap<T>}::insert_in_list]: Source: 'tests/src/hashmap.rs', lines 97:4-97:71 *) let hashMap_insert_in_list (t : Type0) (key : usize) (value : t) (ls : list_t t) : result (bool & (list_t t)) = - hashMap_insert_in_list_loop t key value ls + admit (** [hashmap::{hashmap::HashMap<T>}::insert_no_resize]: Source: 'tests/src/hashmap.rs', lines 117:4-117:54 *) @@ -133,46 +97,11 @@ let hashMap_insert_no_resize Ok { self with num_entries = i1; slots = v } else let* v = index_mut_back l1 in Ok { self with slots = v } -(** [hashmap::{hashmap::HashMap<T>}::move_elements_from_list]: loop 0: - Source: 'tests/src/hashmap.rs', lines 183:4-196:5 *) -let rec hashMap_move_elements_from_list_loop - (t : Type0) (ntable : hashMap_t t) (ls : list_t t) : - Tot (result (hashMap_t t)) - (decreases (hashMap_move_elements_from_list_loop_decreases t ntable ls)) - = - begin match ls with - | List_Cons k v tl -> - let* ntable1 = hashMap_insert_no_resize t ntable k v in - hashMap_move_elements_from_list_loop t ntable1 tl - | List_Nil -> Ok ntable - end - (** [hashmap::{hashmap::HashMap<T>}::move_elements_from_list]: Source: 'tests/src/hashmap.rs', lines 183:4-183:72 *) let hashMap_move_elements_from_list (t : Type0) (ntable : hashMap_t t) (ls : list_t t) : result (hashMap_t t) = - hashMap_move_elements_from_list_loop t ntable ls - -(** [hashmap::{hashmap::HashMap<T>}::move_elements]: loop 0: - Source: 'tests/src/hashmap.rs', lines 171:4-180:5 *) -let rec hashMap_move_elements_loop - (t : Type0) (ntable : hashMap_t t) (slots : alloc_vec_Vec (list_t t)) - (i : usize) : - Tot (result ((hashMap_t t) & (alloc_vec_Vec (list_t t)))) - (decreases (hashMap_move_elements_loop_decreases t ntable slots i)) - = - let i1 = alloc_vec_Vec_len (list_t t) slots in - if i < i1 - then - let* (l, index_mut_back) = - alloc_vec_Vec_index_mut (list_t t) usize - (core_slice_index_SliceIndexUsizeSliceTInst (list_t t)) slots i in - let (ls, l1) = core_mem_replace (list_t t) l List_Nil in - let* ntable1 = hashMap_move_elements_from_list t ntable ls in - let* i2 = usize_add i 1 in - let* slots1 = index_mut_back l1 in - hashMap_move_elements_loop t ntable1 slots1 i2 - else Ok (ntable, slots) + admit (** [hashmap::{hashmap::HashMap<T>}::move_elements]: Source: 'tests/src/hashmap.rs', lines 171:4-171:95 *) @@ -181,7 +110,7 @@ let hashMap_move_elements (i : usize) : result ((hashMap_t t) & (alloc_vec_Vec (list_t t))) = - hashMap_move_elements_loop t ntable slots i + admit (** [hashmap::{hashmap::HashMap<T>}::try_resize]: Source: 'tests/src/hashmap.rs', lines 140:4-140:28 *) @@ -213,24 +142,11 @@ let hashMap_insert let* i = hashMap_len t self1 in if i > self1.max_load then hashMap_try_resize t self1 else Ok self1 -(** [hashmap::{hashmap::HashMap<T>}::contains_key_in_list]: loop 0: - Source: 'tests/src/hashmap.rs', lines 206:4-219:5 *) -let rec hashMap_contains_key_in_list_loop - (t : Type0) (key : usize) (ls : list_t t) : - Tot (result bool) - (decreases (hashMap_contains_key_in_list_loop_decreases t key ls)) - = - begin match ls with - | List_Cons ckey _ tl -> - if ckey = key then Ok true else hashMap_contains_key_in_list_loop t key tl - | List_Nil -> Ok false - end - (** [hashmap::{hashmap::HashMap<T>}::contains_key_in_list]: Source: 'tests/src/hashmap.rs', lines 206:4-206:68 *) let hashMap_contains_key_in_list (t : Type0) (key : usize) (ls : list_t t) : result bool = - hashMap_contains_key_in_list_loop t key ls + admit (** [hashmap::{hashmap::HashMap<T>}::contains_key]: Source: 'tests/src/hashmap.rs', lines 199:4-199:49 *) @@ -245,22 +161,10 @@ let hashMap_contains_key hash_mod in hashMap_contains_key_in_list t key l -(** [hashmap::{hashmap::HashMap<T>}::get_in_list]: loop 0: - Source: 'tests/src/hashmap.rs', lines 224:4-237:5 *) -let rec hashMap_get_in_list_loop - (t : Type0) (key : usize) (ls : list_t t) : - Tot (result t) (decreases (hashMap_get_in_list_loop_decreases t key ls)) - = - begin match ls with - | List_Cons ckey cvalue tl -> - if ckey = key then Ok cvalue else hashMap_get_in_list_loop t key tl - | List_Nil -> Fail Failure - end - (** [hashmap::{hashmap::HashMap<T>}::get_in_list]: Source: 'tests/src/hashmap.rs', lines 224:4-224:70 *) let hashMap_get_in_list (t : Type0) (key : usize) (ls : list_t t) : result t = - hashMap_get_in_list_loop t key ls + admit (** [hashmap::{hashmap::HashMap<T>}::get]: Source: 'tests/src/hashmap.rs', lines 239:4-239:55 *) @@ -274,32 +178,13 @@ let hashMap_get (t : Type0) (self : hashMap_t t) (key : usize) : result t = hash_mod in hashMap_get_in_list t key l -(** [hashmap::{hashmap::HashMap<T>}::get_mut_in_list]: loop 0: - Source: 'tests/src/hashmap.rs', lines 245:4-254:5 *) -let rec hashMap_get_mut_in_list_loop - (t : Type0) (ls : list_t t) (key : usize) : - Tot (result (t & (t -> result (list_t t)))) - (decreases (hashMap_get_mut_in_list_loop_decreases t ls key)) - = - begin match ls with - | List_Cons ckey cvalue tl -> - if ckey = key - then let back = fun ret -> Ok (List_Cons ckey ret tl) in Ok (cvalue, back) - else - let* (x, back) = hashMap_get_mut_in_list_loop t tl key in - let back1 = - fun ret -> let* tl1 = back ret in Ok (List_Cons ckey cvalue tl1) in - Ok (x, back1) - | List_Nil -> Fail Failure - end - (** [hashmap::{hashmap::HashMap<T>}::get_mut_in_list]: Source: 'tests/src/hashmap.rs', lines 245:4-245:86 *) let hashMap_get_mut_in_list (t : Type0) (ls : list_t t) (key : usize) : result (t & (t -> result (list_t t))) = - hashMap_get_mut_in_list_loop t ls key + admit (** [hashmap::{hashmap::HashMap<T>}::get_mut]: Source: 'tests/src/hashmap.rs', lines 257:4-257:67 *) @@ -322,36 +207,13 @@ let hashMap_get_mut Ok { self with slots = v } in Ok (x, back) -(** [hashmap::{hashmap::HashMap<T>}::remove_from_list]: loop 0: - Source: 'tests/src/hashmap.rs', lines 265:4-291:5 *) -let rec hashMap_remove_from_list_loop - (t : Type0) (key : usize) (ls : list_t t) : - Tot (result ((option t) & (list_t t))) - (decreases (hashMap_remove_from_list_loop_decreases t key ls)) - = - begin match ls with - | List_Cons ckey x tl -> - if ckey = key - then - let (mv_ls, _) = - core_mem_replace (list_t t) (List_Cons ckey x tl) List_Nil in - begin match mv_ls with - | List_Cons _ cvalue tl1 -> Ok (Some cvalue, tl1) - | List_Nil -> Fail Failure - end - else - let* (o, tl1) = hashMap_remove_from_list_loop t key tl in - Ok (o, List_Cons ckey x tl1) - | List_Nil -> Ok (None, List_Nil) - end - (** [hashmap::{hashmap::HashMap<T>}::remove_from_list]: Source: 'tests/src/hashmap.rs', lines 265:4-265:69 *) let hashMap_remove_from_list (t : Type0) (key : usize) (ls : list_t t) : result ((option t) & (list_t t)) = - hashMap_remove_from_list_loop t key ls + admit (** [hashmap::{hashmap::HashMap<T>}::remove]: Source: 'tests/src/hashmap.rs', lines 294:4-294:52 *) |