lean4-htt/tests/lean/run/structure.lean
2019-12-12 08:48:49 -08:00

45 lines
1.1 KiB
Text

import Init.Lean
open Lean
structure S1 :=
(x y : Nat)
structure S2 extends S1 :=
(z : Nat)
structure S3 :=
(w : Nat)
structure S4 extends S2, S3 :=
(s : Nat)
def check (b : Bool) : MetaIO Unit :=
unless b $ throw $ IO.userError "check failed"
class S5 :=
(x y : Nat)
inductive D
| mk (x y z : Nat) : D
def tst : MetaIO Unit :=
do env ← MetaIO.getEnv;
IO.println (getStructureFields env `Lean.Environment);
check $ getStructureFields env `S4 == #[`toS2, `toS3, `s];
check $ getStructureFields env `S1 == #[`x, `y];
check $ isSubobjectField? env `S4 `toS2 == some `S2;
check $ getParentStructures env `S4 == #[`S2, `S3];
check $ findField? env `S4 `x == some `S1;
check $ findField? env `S4 `x1 == none;
check $ isStructure env `S1;
check $ isStructure env `S2;
check $ isStructure env `S3;
check $ isStructure env `S4;
check $ isStructure env `S5;
check $ !isStructure env `Nat;
check $ !isStructure env `D;
IO.println (getStructureFieldsFlattened env `S4);
IO.println (getStructureFields env `D);
pure ()
#eval tst