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.)
52 lines
968 B
Text
52 lines
968 B
Text
import Lean.Meta
|
||
|
||
open Lean
|
||
open Lean.Meta
|
||
|
||
universe u v w
|
||
|
||
abbrev M := ExceptT String MetaM
|
||
|
||
def testM {α} [BEq α] [ToString α] (x : M α) (expected : α) : MetaM Unit := do
|
||
let r ← x
|
||
match r with
|
||
| Except.ok a => unless a == expected do throwError m!"unexpected result {a}"
|
||
| Except.error e => throwError m!"FAILED: {e}"
|
||
|
||
@[noinline] def act1 : M Nat :=
|
||
throw <| Exception.error Syntax.missing "Error at act1"
|
||
|
||
def g1 : M Nat :=
|
||
tryCatchThe Exception
|
||
(tryCatchThe String act1 (fun ex => pure 100))
|
||
(fun ex => pure 200)
|
||
|
||
/-- info: -/
|
||
#guard_msgs in
|
||
#eval testM g1 200
|
||
|
||
@[noinline] def act2 : M Nat :=
|
||
throwThe String "hello world"
|
||
|
||
def g2 : M Nat :=
|
||
tryCatchThe Exception
|
||
(tryCatchThe String act2 (fun ex => pure 100))
|
||
(fun ex => pure 200)
|
||
|
||
/-- info: -/
|
||
#guard_msgs in
|
||
#eval testM g2 100
|
||
|
||
def h1 : CoreM Nat :=
|
||
pure 10
|
||
|
||
/-- info: 10 -/
|
||
#guard_msgs in
|
||
#eval h1
|
||
|
||
def h2 : MetaM Nat :=
|
||
pure 20
|
||
|
||
/-- info: 20 -/
|
||
#guard_msgs in
|
||
#eval h2
|