aboutsummaryrefslogtreecommitdiff
path: root/test-suite
diff options
context:
space:
mode:
Diffstat (limited to 'test-suite')
-rw-r--r--test-suite/bugs/closed/bug_4502.v17
-rw-r--r--test-suite/ltac2/term_notations.v33
-rw-r--r--test-suite/output/NumeralNotations.out38
-rw-r--r--test-suite/output/NumeralNotations.v65
-rw-r--r--test-suite/success/Fixpoint.v15
5 files changed, 168 insertions, 0 deletions
diff --git a/test-suite/bugs/closed/bug_4502.v b/test-suite/bugs/closed/bug_4502.v
new file mode 100644
index 0000000000..f1dcae9773
--- /dev/null
+++ b/test-suite/bugs/closed/bug_4502.v
@@ -0,0 +1,17 @@
+Require Import FunInd.
+
+Set Universe Polymorphism.
+Set Primitive Projections.
+Set Implicit Arguments.
+Set Strongly Strict Implicit.
+
+Function first_false (n : nat) (f : nat -> bool) : option nat :=
+ match n with
+ | O => None
+ | S m =>
+ match first_false m f with
+ | (Some _) as s => s
+ | None => if f m then None else Some m
+ end
+ end.
+(* undefined universe *)
diff --git a/test-suite/ltac2/term_notations.v b/test-suite/ltac2/term_notations.v
new file mode 100644
index 0000000000..85eb858d4e
--- /dev/null
+++ b/test-suite/ltac2/term_notations.v
@@ -0,0 +1,33 @@
+Require Import Ltac2.Ltac2.
+
+(* Preterms are not terms *)
+Fail Notation "[ x ]" := $x.
+
+Section Foo.
+
+Notation "[ x ]" := ltac2:(Control.refine (fun _ => Constr.pretype x)).
+
+Goal [ True ].
+Proof.
+constructor.
+Qed.
+
+End Foo.
+
+Section Bar.
+
+(* Have fun with context capture *)
+Notation "[ x ]" := ltac2:(
+ let c () := Constr.pretype x in
+ refine constr:(forall n : nat, n = ltac2:(Notations.exact0 true c))
+).
+
+Goal forall n : nat, [ n ].
+Proof.
+reflexivity.
+Qed.
+
+(* This fails currently, which is arguably a bug *)
+Fail Goal [ n ].
+
+End Bar.
diff --git a/test-suite/output/NumeralNotations.out b/test-suite/output/NumeralNotations.out
index 460c77879c..505dc52ebe 100644
--- a/test-suite/output/NumeralNotations.out
+++ b/test-suite/output/NumeralNotations.out
@@ -180,3 +180,41 @@ let v := 4%Zlike in v : Zlike
: Zlike
0%Zlike
: Zlike
+let v := 0%kt in v : ty
+ : ty
+let v := 1%kt in v : ty
+ : ty
+let v := 2%kt in v : ty
+ : ty
+let v := 3%kt in v : ty
+ : ty
+let v := 4%kt in v : ty
+ : ty
+let v := 5%kt in v : ty
+ : ty
+The command has indeed failed with message:
+Cannot interpret this number as a value of type ty
+ = 0%kt
+ : ty
+ = 1%kt
+ : ty
+ = 2%kt
+ : ty
+ = 3%kt
+ : ty
+ = 4%kt
+ : ty
+ = 5%kt
+ : ty
+let v : ty := Build_ty Empty_set zero in v : ty
+ : ty
+let v : ty := Build_ty unit one in v : ty
+ : ty
+let v : ty := Build_ty bool two in v : ty
+ : ty
+let v : ty := Build_ty Prop prop in v : ty
+ : ty
+let v : ty := Build_ty Set set in v : ty
+ : ty
+let v : ty := Build_ty Type type in v : ty
+ : ty
diff --git a/test-suite/output/NumeralNotations.v b/test-suite/output/NumeralNotations.v
index 44805ad09d..c306b15ef3 100644
--- a/test-suite/output/NumeralNotations.v
+++ b/test-suite/output/NumeralNotations.v
@@ -391,3 +391,68 @@ Module Test19.
Check {| summands := (cons 1 (cons 2 (cons (-1) nil)))%Z |}.
Check {| summands := nil |}.
End Test19.
+
+Module Test20.
+ (** Test Sorts *)
+ Local Set Universe Polymorphism.
+ Inductive known_type : Type -> Type :=
+ | prop : known_type Prop
+ | set : known_type Set
+ | type : known_type Type
+ | zero : known_type Empty_set
+ | one : known_type unit
+ | two : known_type bool.
+
+ Existing Class known_type.
+ Existing Instances zero one two prop.
+ Existing Instance set | 2.
+ Existing Instance type | 4.
+
+ Record > ty := { t : Type ; kt : known_type t }.
+
+ Definition ty_of_uint (x : Decimal.uint) : option ty
+ := match Nat.of_uint x with
+ | 0 => @Some ty zero
+ | 1 => @Some ty one
+ | 2 => @Some ty two
+ | 3 => @Some ty prop
+ | 4 => @Some ty set
+ | 5 => @Some ty type
+ | _ => None
+ end.
+ Definition uint_of_ty (x : ty) : Decimal.uint
+ := Nat.to_uint match kt x with
+ | prop => 3
+ | set => 4
+ | type => 5
+ | zero => 0
+ | one => 1
+ | two => 2
+ end.
+
+ Declare Scope kt_scope.
+ Delimit Scope kt_scope with kt.
+
+ Numeral Notation ty ty_of_uint uint_of_ty : kt_scope.
+
+ Check let v := 0%kt in v : ty.
+ Check let v := 1%kt in v : ty.
+ Check let v := 2%kt in v : ty.
+ Check let v := 3%kt in v : ty.
+ Check let v := 4%kt in v : ty.
+ Check let v := 5%kt in v : ty.
+ Fail Check let v := 6%kt in v : ty.
+ Eval cbv in (_ : known_type Empty_set) : ty.
+ Eval cbv in (_ : known_type unit) : ty.
+ Eval cbv in (_ : known_type bool) : ty.
+ Eval cbv in (_ : known_type Prop) : ty.
+ Eval cbv in (_ : known_type Set) : ty.
+ Eval cbv in (_ : known_type Type) : ty.
+ Local Set Printing All.
+ Check let v := 0%kt in v : ty.
+ Check let v := 1%kt in v : ty.
+ Check let v := 2%kt in v : ty.
+ Check let v := 3%kt in v : ty.
+ Check let v := 4%kt in v : ty.
+ Check let v := 5%kt in v : ty.
+End Test20.
diff --git a/test-suite/success/Fixpoint.v b/test-suite/success/Fixpoint.v
index 81c9763ccd..6c333121da 100644
--- a/test-suite/success/Fixpoint.v
+++ b/test-suite/success/Fixpoint.v
@@ -96,10 +96,25 @@ Section visibility.
Let Fixpoint by_proof (n:nat) : True.
Proof. exact I. Defined.
+
+ Let Fixpoint foo (n:nat) : bool with bar (n:nat) : bool.
+ Proof.
+ - destruct n as [|n].
+ + exact true.
+ + exact (bar n).
+ - destruct n as [|n].
+ + exact false.
+ + exact (foo n).
+ Qed.
+
+ Let Fixpoint bla (n:nat) : Type with bli (n:nat) : bool.
+ Admitted.
+
End visibility.
Fail Check imm.
Fail Check by_proof.
+Check bla. Check bli.
Module Import mod_local.
Fixpoint imm_importable (n:nat) : True := I.