mikeljl's picture
use pypantograph for checking submitted statements
0115dcf
import Test.Delate
import Test.Environment
import Test.Frontend
import Test.Integration
import Test.Library
import Test.Metavar
import Test.Parser
import Test.Proofs
import Test.Serial
import Test.Tactic
import LSpec
-- Test running infrastructure
namespace Pantograph.Test
def addPrefix (pref: String) (tests: List (String × α)): List (String × α) :=
tests.map (λ (name, x) => (pref ++ "/" ++ name, x))
abbrev TestTask := Task (Except IO.Error LSpec.TestSeq)
def filterTestGroup (tests : List (String × IO LSpec.TestSeq)) (nameFilter? : Option String)
: IO (List (String × TestTask)) := do
let tests : List (String × IO LSpec.TestSeq) := match nameFilter? with
| .some nameFilter => tests.filter (λ (name, _) => nameFilter.isPrefixOf name)
| .none => tests
tests.mapM λ (name, t) => return (name, ← IO.asTask t)
/-- Runs test in parallel. Filters test name if given -/
def runTestTask (t : (String × TestTask)) : IO LSpec.TestSeq := do
let (name, task) := t
let v: Except IO.Error LSpec.TestSeq := task.get
return match v with
| .ok case => LSpec.group name case
| .error e => expectationFailure name e.toString
end Pantograph.Test
open Pantograph.Test
/-- Main entry of tests; Provide an argument to filter tests by prefix -/
def main (args: List String) := do
let nameFilter? := args.head?
Lean.initSearchPath (← Lean.findSysroot)
let env_default : Lean.Environment ← Lean.importModules
(imports := #[`Init])
(opts := {})
(trustLevel := 1)
(loadExts := true)
let suites: List (String × (Lean.Environment → List (String × IO LSpec.TestSeq))) := [
("Environment", Environment.suite),
("Frontend/Collect", Frontend.Collect.suite),
("Frontend/Distil", Frontend.Distil.suite),
("Frontend/Refactor", Frontend.Refactor.suite),
("Integration", Integration.suite),
("Library", Library.suite),
("Metavar", Metavar.suite),
("Parser", Parser.suite),
("Proofs", Proofs.suite),
("Delate", Delate.suite),
("Serial", Serial.suite),
("Tactic/Assign", Tactic.Assign.suite),
("Tactic/Fragment", Tactic.Fragment.suite),
("Tactic/Prograde", Tactic.Prograde.suite),
]
let suiterunner (f : Lean.Environment → List (String × IO LSpec.TestSeq)) :=
f env_default
let tests : List (String × IO LSpec.TestSeq) := suites.foldl (init := []) λ acc (name, suite) =>
acc ++ (addPrefix name $ suiterunner suite)
LSpec.lspecEachIO (← filterTestGroup tests nameFilter?) runTestTask