Many of our tests in `tests/lean/run/` produce output from `#eval` (or `#check`) statements, that is then ignored. This PR tries to capture all the useful output using `#guard_msgs`. I've only done a cursory check that the output is still sane --- there is a chance that some "unchecked" tests have already accumulated regressions and this just cements them! In the other direction, I did identify two rotten tests: * a minor one in `setStructInstNotation.lean`, where a comment says `Set Nat`, but `#check` actually prints `?_`. Weird? * `CompilerProbe.lean` is generating empty output, apparently indicating that something is broken, but I don't know the signficance of this file. In any case, I'll ask about these elsewhere. (This started by noticing that a recent `grind` test file had an untested `trace_state`, and then got carried away.)
66 lines
1.6 KiB
Text
66 lines
1.6 KiB
Text
import Lean
|
||
|
||
open Lean
|
||
open Lean.Meta
|
||
|
||
inductive Vec (α : Type) : Nat → Type
|
||
| nil : Vec α 0
|
||
| cons {n} : α → Vec α n → Vec α (n+1)
|
||
|
||
set_option trace.Meta.debug true
|
||
|
||
def nat := mkConst `Nat
|
||
def succ := mkConst `Nat.succ
|
||
|
||
def tst1 : MetaM Unit :=
|
||
withLocalDeclD `n nat fun n => do
|
||
let n1 := mkApp succ n
|
||
let vecN1 := mkApp2 (mkConst `Vec) nat n1
|
||
withLocalDeclD `xs vecN1 fun xs => do
|
||
generalizeTelescope #[n1, xs] fun ys => do
|
||
let t ← mkLambdaFVars ys ys.back
|
||
trace[Meta.debug] t
|
||
pure ()
|
||
|
||
/-- info: [Meta.debug] fun x x => x -/
|
||
#guard_msgs in
|
||
#eval tst1
|
||
|
||
set_option pp.all true
|
||
|
||
def tst2 : MetaM Unit :=
|
||
withLocalDeclD `n nat fun n => do
|
||
let n1 := mkApp succ n
|
||
let vecN1 := mkApp2 (mkConst `Vec) nat n1
|
||
withLocalDeclD `xs vecN1 $ fun xs => do
|
||
let e ← mkEqRefl xs
|
||
generalizeTelescope #[n1, xs, e] fun ys => do
|
||
let t ← mkLambdaFVars ys ys.back
|
||
trace[Meta.debug] t
|
||
pure ()
|
||
|
||
/-- info: [Meta.debug] fun (x : Nat) (x_1 : Vec Nat x) (x : @Eq.{1} (Vec Nat x) x_1 x_1) => x -/
|
||
#guard_msgs in
|
||
#eval tst2
|
||
|
||
def failIfSuccess (x : MetaM Unit) : MetaM Unit := do
|
||
let worked ← try x; pure true catch _ => pure false
|
||
if worked then
|
||
throwError "unexpected success"
|
||
|
||
def tst3 : MetaM Unit :=
|
||
withLocalDeclD `n nat $ fun n => do
|
||
let n1 := mkApp succ n
|
||
let vecN1 := mkApp2 (mkConst `Vec) nat n1
|
||
withLocalDeclD `xs vecN1 $ fun xs => do
|
||
let e ← mkEqRefl xs
|
||
failIfSuccess do
|
||
generalizeTelescope #[n1, e] fun ys => do
|
||
let t ← mkLambdaFVars ys ys.back
|
||
trace[Meta.debug] t
|
||
pure ()
|
||
trace[Meta.debug] "failed as expected"
|
||
|
||
/-- info: [Meta.debug] failed as expected -/
|
||
#guard_msgs in
|
||
#eval tst3
|