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.)
75 lines
1.3 KiB
Text
75 lines
1.3 KiB
Text
structure Foo where
|
||
a : Nat
|
||
b : Nat
|
||
|
||
def bla (x : Foo) : IO Unit := do
|
||
let { a, b } := x
|
||
|
||
def Set (α : Type u) := α → Prop
|
||
|
||
def setOf {α : Type u} (p : α → Prop) : Set α :=
|
||
p
|
||
|
||
namespace Set
|
||
|
||
protected def mem (a : α) (s : Set α) :=
|
||
s a
|
||
|
||
instance : Membership α (Set α) :=
|
||
⟨Set.mem⟩
|
||
|
||
protected def subset (s₁ s₂ : Set α) :=
|
||
∀ {a}, a ∈ s₁ → a ∈ s₂
|
||
|
||
instance : EmptyCollection (Set α) :=
|
||
⟨λ a => false⟩
|
||
|
||
protected def insert (a : α) (s : Set α) : Set α :=
|
||
fun b => b = a ∨ b ∈ s
|
||
|
||
protected def singleton (a : α) : Set α :=
|
||
fun b => b = a
|
||
|
||
instance : Insert α (Set α) := ⟨Set.insert⟩
|
||
instance : Singleton α (Set α) := ⟨Set.singleton⟩
|
||
|
||
set_option pp.mvars false in
|
||
/-- info: {1, 2} : ?_ -/
|
||
#guard_msgs in
|
||
#check { 1, 2 }
|
||
|
||
end Set
|
||
def f1 (a b : Nat) : Set Nat :=
|
||
{ a, b }
|
||
|
||
def f2 (a b : Nat) : Foo :=
|
||
{ a, b }
|
||
|
||
def f3 (a b : Nat) : Set Nat :=
|
||
{ a, b }
|
||
|
||
/-- info: f3 (a b : Nat) : Set Nat -/
|
||
#guard_msgs in
|
||
#check f3
|
||
|
||
def f4 (a b : α) : Set α :=
|
||
{ a, b }
|
||
|
||
/-- info: @f4 : {α : Type u_1} → α → α → Set α -/
|
||
#guard_msgs in
|
||
#check @f4
|
||
|
||
def f5 (a b : Nat) :=
|
||
{ a, b : Foo }
|
||
|
||
def boo1 (x : Foo) : IO Unit :=
|
||
let { a, b } := x
|
||
pure ()
|
||
|
||
def boo2 (x : Foo) : IO Unit := do
|
||
let { a, b } := x
|
||
pure ()
|
||
|
||
def boo3 (x : Nat → IO Foo) : IO Nat := do
|
||
let { a, b } ← x 0
|
||
return a + b
|