summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/coq/misc/Loops.v136
-rw-r--r--tests/fstar/misc/Loops.Clauses.Template.fst18
-rw-r--r--tests/fstar/misc/Loops.Clauses.fst20
-rw-r--r--tests/fstar/misc/Loops.Funs.fst138
4 files changed, 312 insertions, 0 deletions
diff --git a/tests/coq/misc/Loops.v b/tests/coq/misc/Loops.v
index 4fc68e1c..ec8fa39c 100644
--- a/tests/coq/misc/Loops.v
+++ b/tests/coq/misc/Loops.v
@@ -62,6 +62,29 @@ Definition sum_with_shared_borrows_fwd (n : nat) (max : u32) : result u32 :=
sum_with_shared_borrows_loop_fwd n max (0%u32) (0%u32)
.
+(** [loops::clear] *)
+Definition clear_loop_fwd_back
+ (n : nat) (v : vec u32) (i : usize) : result (vec u32) :=
+ match n with
+ | O => Fail_ OutOfFuel
+ | S n0 =>
+ let i0 := vec_len u32 v in
+ if i s< i0
+ then (
+ i1 <- usize_add i 1%usize;
+ v0 <- vec_index_mut_back u32 v i (0%u32);
+ v1 <- clear_loop_fwd n0 v0 i1;
+ let _ := v1 in
+ Return v0)
+ else Return v
+ end
+.
+
+(** [loops::clear] *)
+Definition clear_fwd_back (n : nat) (v : vec u32) : result (vec u32) :=
+ v0 <- clear_loop_fwd n v (0%usize); let _ := v0 in Return v
+.
+
(** [loops::List] *)
Inductive List_t (T : Type) :=
| ListCons : T -> List_t T -> List_t T
@@ -71,6 +94,25 @@ Inductive List_t (T : Type) :=
Arguments ListCons {T} _ _.
Arguments ListNil {T}.
+(** [loops::list_mem] *)
+Fixpoint list_mem_loop_fwd
+ (n : nat) (i : u32) (ls : List_t u32) : result bool :=
+ match n with
+ | O => Fail_ OutOfFuel
+ | S n0 =>
+ match ls with
+ | ListCons y tl =>
+ if y s= i then Return true else list_mem_loop_fwd n0 i tl
+ | ListNil => Return false
+ end
+ end
+.
+
+(** [loops::list_mem] *)
+Definition list_mem_fwd (n : nat) (x : u32) (ls : List_t u32) : result bool :=
+ list_mem_loop_fwd n x ls
+.
+
(** [loops::list_nth_mut_loop] *)
Fixpoint list_nth_mut_loop_loop_fwd
(T : Type) (n : nat) (ls : List_t T) (i : u32) : result T :=
@@ -144,6 +186,100 @@ Definition list_nth_shared_loop_fwd
list_nth_shared_loop_loop_fwd T n ls i
.
+(** [loops::id_mut] *)
+Definition id_mut_fwd (T : Type) (ls : List_t T) : result (List_t T) :=
+ Return ls
+.
+
+(** [loops::id_mut] *)
+Definition id_mut_back
+ (T : Type) (ls : List_t T) (ret : List_t T) : result (List_t T) :=
+ Return ret
+.
+
+(** [loops::id_shared] *)
+Definition id_shared_fwd (T : Type) (ls : List_t T) : result (List_t T) :=
+ Return ls
+.
+
+(** [loops::list_nth_mut_loop_with_id] *)
+Fixpoint list_nth_mut_loop_with_id_loop_fwd
+ (T : Type) (n : nat) (i : u32) (ls : List_t T) : result T :=
+ match n with
+ | O => Fail_ OutOfFuel
+ | S n0 =>
+ match ls with
+ | ListCons x tl =>
+ if i s= 0%u32
+ then Return x
+ else (
+ i0 <- u32_sub i 1%u32; list_nth_mut_loop_with_id_loop_fwd T n0 i0 tl)
+ | ListNil => Fail_ Failure
+ end
+ end
+.
+
+(** [loops::list_nth_mut_loop_with_id] *)
+Definition list_nth_mut_loop_with_id_fwd
+ (T : Type) (n : nat) (ls : List_t T) (i : u32) : result T :=
+ ls0 <- id_mut_fwd T ls; list_nth_mut_loop_with_id_loop_fwd T n i ls0
+.
+
+(** [loops::list_nth_mut_loop_with_id] *)
+Fixpoint list_nth_mut_loop_with_id_loop_back
+ (T : Type) (n : nat) (i : u32) (ls : List_t T) (ret : T) :
+ result (List_t T)
+ :=
+ match n with
+ | O => Fail_ OutOfFuel
+ | S n0 =>
+ match ls with
+ | ListCons x tl =>
+ if i s= 0%u32
+ then Return (ListCons ret tl)
+ else (
+ i0 <- u32_sub i 1%u32;
+ l <- list_nth_mut_loop_with_id_loop_back T n0 i0 tl ret;
+ Return (ListCons x l))
+ | ListNil => Fail_ Failure
+ end
+ end
+.
+
+(** [loops::list_nth_mut_loop_with_id] *)
+Definition list_nth_mut_loop_with_id_back
+ (T : Type) (n : nat) (ls : List_t T) (i : u32) (ret : T) :
+ result (List_t T)
+ :=
+ ls0 <- id_mut_fwd T ls;
+ l <- list_nth_mut_loop_with_id_loop_back T n i ls0 ret;
+ id_mut_back T ls l
+.
+
+(** [loops::list_nth_shared_loop_with_id] *)
+Fixpoint list_nth_shared_loop_with_id_loop_fwd
+ (T : Type) (n : nat) (l : List_t T) (i : u32) (ls : List_t T) : result T :=
+ match n with
+ | O => Fail_ OutOfFuel
+ | S n0 =>
+ match ls with
+ | ListCons x tl =>
+ if i s= 0%u32
+ then Return x
+ else (
+ i0 <- u32_sub i 1%u32;
+ list_nth_shared_loop_with_id_loop_fwd T n0 l i0 tl)
+ | ListNil => Fail_ Failure
+ end
+ end
+.
+
+(** [loops::list_nth_shared_loop_with_id] *)
+Definition list_nth_shared_loop_with_id_fwd
+ (T : Type) (n : nat) (ls : List_t T) (i : u32) : result T :=
+ ls0 <- id_shared_fwd T ls; list_nth_shared_loop_with_id_loop_fwd T n ls i ls0
+.
+
(** [loops::list_nth_mut_loop_pair] *)
Fixpoint list_nth_mut_loop_pair_loop_fwd
(T : Type) (n : nat) (l : List_t T) (l0 : List_t T) (i : u32) :
diff --git a/tests/fstar/misc/Loops.Clauses.Template.fst b/tests/fstar/misc/Loops.Clauses.Template.fst
index cd29ca13..98d0a8ad 100644
--- a/tests/fstar/misc/Loops.Clauses.Template.fst
+++ b/tests/fstar/misc/Loops.Clauses.Template.fst
@@ -19,6 +19,12 @@ unfold
let sum_with_shared_borrows_decreases (max : u32) (i : u32) (s : u32) : nat =
admit ()
+(** [loops::clear]: decreases clause *)
+unfold let clear_decreases (v : vec u32) (i : usize) : nat = admit ()
+
+(** [loops::list_mem]: decreases clause *)
+unfold let list_mem_decreases (i : u32) (ls : list_t u32) : nat = admit ()
+
(** [loops::list_nth_mut_loop]: decreases clause *)
unfold
let list_nth_mut_loop_decreases (t : Type0) (ls : list_t t) (i : u32) : nat =
@@ -30,6 +36,18 @@ let list_nth_shared_loop_decreases (t : Type0) (ls : list_t t) (i : u32) : nat
=
admit ()
+(** [loops::list_nth_mut_loop_with_id]: decreases clause *)
+unfold
+let list_nth_mut_loop_with_id_decreases (t : Type0) (i : u32) (ls : list_t t) :
+ nat =
+ admit ()
+
+(** [loops::list_nth_shared_loop_with_id]: decreases clause *)
+unfold
+let list_nth_shared_loop_with_id_decreases (t : Type0) (l : list_t t)
+ (i : u32) (ls : list_t t) : nat =
+ admit ()
+
(** [loops::list_nth_mut_loop_pair]: decreases clause *)
unfold
let list_nth_mut_loop_pair_decreases (t : Type0) (l : list_t t) (l0 : list_t t)
diff --git a/tests/fstar/misc/Loops.Clauses.fst b/tests/fstar/misc/Loops.Clauses.fst
index 9cf5db1f..e673d4ff 100644
--- a/tests/fstar/misc/Loops.Clauses.fst
+++ b/tests/fstar/misc/Loops.Clauses.fst
@@ -19,6 +19,14 @@ unfold
let sum_with_shared_borrows_decreases (max : u32) (i : u32) (s : u32) : nat =
if max >= i then max - i else 0
+(** [loops::clear]: decreases clause *)
+unfold let clear_decreases (v : vec u32) (i : usize) : nat =
+ if i <= List.Tot.length v then List.Tot.length v - i else 0
+
+(** [loops::list_mem]: decreases clause *)
+unfold let list_mem_decreases (i : u32) (ls : list_t u32) : list_t u32 =
+ ls
+
(** [loops::list_nth_mut_loop]: decreases clause *)
unfold
let list_nth_mut_loop_decreases (t : Type0) (ls : list_t t) (i : u32) : nat =
@@ -29,6 +37,18 @@ unfold
let list_nth_shared_loop_decreases (t : Type0) (ls : list_t t) (i : u32) : list_t t =
ls
+(** [loops::list_nth_mut_loop_with_id]: decreases clause *)
+unfold
+let list_nth_mut_loop_with_id_decreases (t : Type0) (i : u32) (ls : list_t t) :
+ list_t t =
+ ls
+
+(** [loops::list_nth_shared_loop_with_id]: decreases clause *)
+unfold
+let list_nth_shared_loop_with_id_decreases (t : Type0) (l : list_t t)
+ (i : u32) (ls : list_t t) : list_t t =
+ ls
+
(** [loops::list_nth_mut_loop_pair]: decreases clause *)
unfold
let list_nth_mut_loop_pair_decreases (t : Type0) (l : list_t t) (l0 : list_t t)
diff --git a/tests/fstar/misc/Loops.Funs.fst b/tests/fstar/misc/Loops.Funs.fst
index ee8e95d2..d19e9328 100644
--- a/tests/fstar/misc/Loops.Funs.fst
+++ b/tests/fstar/misc/Loops.Funs.fst
@@ -69,6 +69,49 @@ let rec sum_with_shared_borrows_loop_fwd
let sum_with_shared_borrows_fwd (max : u32) : result u32 =
sum_with_shared_borrows_loop_fwd max 0 0
+(** [loops::clear] *)
+let clear_loop_fwd_back
+ (v : vec u32) (i : usize) :
+ Tot (result (vec u32)) (decreases (clear_decreases v i))
+ =
+ let i0 = vec_len u32 v in
+ if i < i0
+ then
+ begin match usize_add i 1 with
+ | Fail e -> Fail e
+ | Return i1 ->
+ begin match vec_index_mut_back u32 v i 0 with
+ | Fail e -> Fail e
+ | Return v0 ->
+ begin match clear_loop_fwd v0 i1 with
+ | Fail e -> Fail e
+ | Return _ -> Return v0
+ end
+ end
+ end
+ else Return v
+
+(** [loops::clear] *)
+let clear_fwd_back (v : vec u32) : result (vec u32) =
+ begin match clear_loop_fwd v 0 with
+ | Fail e -> Fail e
+ | Return _ -> Return v
+ end
+
+(** [loops::list_mem] *)
+let rec list_mem_loop_fwd
+ (i : u32) (ls : list_t u32) :
+ Tot (result bool) (decreases (list_mem_decreases i ls))
+ =
+ begin match ls with
+ | ListCons y tl -> if y = i then Return true else list_mem_loop_fwd i tl
+ | ListNil -> Return false
+ end
+
+(** [loops::list_mem] *)
+let list_mem_fwd (x : u32) (ls : list_t u32) : result bool =
+ list_mem_loop_fwd x ls
+
(** [loops::list_nth_mut_loop] *)
let rec list_nth_mut_loop_loop_fwd
(t : Type0) (ls : list_t t) (i : u32) :
@@ -137,6 +180,101 @@ let rec list_nth_shared_loop_loop_fwd
let list_nth_shared_loop_fwd (t : Type0) (ls : list_t t) (i : u32) : result t =
list_nth_shared_loop_loop_fwd t ls i
+(** [loops::id_mut] *)
+let id_mut_fwd (t : Type0) (ls : list_t t) : result (list_t t) = Return ls
+
+(** [loops::id_mut] *)
+let id_mut_back
+ (t : Type0) (ls : list_t t) (ret : list_t t) : result (list_t t) =
+ Return ret
+
+(** [loops::id_shared] *)
+let id_shared_fwd (t : Type0) (ls : list_t t) : result (list_t t) = Return ls
+
+(** [loops::list_nth_mut_loop_with_id] *)
+let rec list_nth_mut_loop_with_id_loop_fwd
+ (t : Type0) (i : u32) (ls : list_t t) :
+ Tot (result t) (decreases (list_nth_mut_loop_with_id_decreases t i ls))
+ =
+ begin match ls with
+ | ListCons x tl ->
+ if i = 0
+ then Return x
+ else
+ begin match u32_sub i 1 with
+ | Fail e -> Fail e
+ | Return i0 -> list_nth_mut_loop_with_id_loop_fwd t i0 tl
+ end
+ | ListNil -> Fail Failure
+ end
+
+(** [loops::list_nth_mut_loop_with_id] *)
+let list_nth_mut_loop_with_id_fwd
+ (t : Type0) (ls : list_t t) (i : u32) : result t =
+ begin match id_mut_fwd t ls with
+ | Fail e -> Fail e
+ | Return ls0 -> list_nth_mut_loop_with_id_loop_fwd t i ls0
+ end
+
+(** [loops::list_nth_mut_loop_with_id] *)
+let rec list_nth_mut_loop_with_id_loop_back
+ (t : Type0) (i : u32) (ls : list_t t) (ret : t) :
+ Tot (result (list_t t))
+ (decreases (list_nth_mut_loop_with_id_decreases t i ls))
+ =
+ begin match ls with
+ | ListCons x tl ->
+ if i = 0
+ then Return (ListCons ret tl)
+ else
+ begin match u32_sub i 1 with
+ | Fail e -> Fail e
+ | Return i0 ->
+ begin match list_nth_mut_loop_with_id_loop_back t i0 tl ret with
+ | Fail e -> Fail e
+ | Return l -> Return (ListCons x l)
+ end
+ end
+ | ListNil -> Fail Failure
+ end
+
+(** [loops::list_nth_mut_loop_with_id] *)
+let list_nth_mut_loop_with_id_back
+ (t : Type0) (ls : list_t t) (i : u32) (ret : t) : result (list_t t) =
+ begin match id_mut_fwd t ls with
+ | Fail e -> Fail e
+ | Return ls0 ->
+ begin match list_nth_mut_loop_with_id_loop_back t i ls0 ret with
+ | Fail e -> Fail e
+ | Return l -> id_mut_back t ls l
+ end
+ end
+
+(** [loops::list_nth_shared_loop_with_id] *)
+let rec list_nth_shared_loop_with_id_loop_fwd
+ (t : Type0) (l : list_t t) (i : u32) (ls : list_t t) :
+ Tot (result t) (decreases (list_nth_shared_loop_with_id_decreases t l i ls))
+ =
+ begin match ls with
+ | ListCons x tl ->
+ if i = 0
+ then Return x
+ else
+ begin match u32_sub i 1 with
+ | Fail e -> Fail e
+ | Return i0 -> list_nth_shared_loop_with_id_loop_fwd t l i0 tl
+ end
+ | ListNil -> Fail Failure
+ end
+
+(** [loops::list_nth_shared_loop_with_id] *)
+let list_nth_shared_loop_with_id_fwd
+ (t : Type0) (ls : list_t t) (i : u32) : result t =
+ begin match id_shared_fwd t ls with
+ | Fail e -> Fail e
+ | Return ls0 -> list_nth_shared_loop_with_id_loop_fwd t ls i ls0
+ end
+
(** [loops::list_nth_mut_loop_pair] *)
let rec list_nth_mut_loop_pair_loop_fwd
(t : Type0) (l : list_t t) (l0 : list_t t) (i : u32) :