40 lines
1.6 KiB
Text
40 lines
1.6 KiB
Text
import OctiveLean.Corpus
|
|
|
|
open OctiveLean.Corpus in
|
|
def main (args : List String) : IO UInt32 := do
|
|
match parseArgs args ({} : Config) with
|
|
| .error e =>
|
|
IO.eprintln s!"argument error: {e}"
|
|
IO.eprintln "usage: corpus-check [--dir DIR] [--bin PATH] [--update]"
|
|
return 2
|
|
| .ok cfg =>
|
|
if !(← cfg.binary.pathExists) then
|
|
IO.eprintln s!"binary not found: {cfg.binary}"
|
|
IO.eprintln " run first: lake build octive-lean"
|
|
return 2
|
|
let cases ← discoverCases cfg.dir
|
|
if cases.isEmpty then
|
|
IO.eprintln s!"no .m files in {cfg.dir}"
|
|
return 0
|
|
if cfg.update then
|
|
IO.println s!"Updating expected outputs for {cases.size} case(s)..."
|
|
for c in cases do
|
|
let _ ← updateCase cfg.binary c
|
|
return 0
|
|
IO.println s!"Running {cases.size} case(s) against {cfg.binary}"
|
|
IO.println ""
|
|
let mut s : Summary := { total := cases.size }
|
|
for c in cases do
|
|
let outcome ← runCase cfg.binary c
|
|
printOutcome c outcome
|
|
match outcome with
|
|
| .pass => s := { s with passed := s.passed + 1 }
|
|
| .fail _ _ => s := { s with failed := s.failed + 1 }
|
|
| .runtimeError .. => s := { s with errored := s.errored + 1 }
|
|
| .missingExpected _ => s := { s with missing := s.missing + 1 }
|
|
IO.println ""
|
|
IO.println s!"Total: {s.total} pass: {s.passed} fail: {s.failed} error: {s.errored} miss: {s.missing}"
|
|
if s.failed == 0 && s.errored == 0 && s.missing == 0 then
|
|
return 0
|
|
else
|
|
return 1
|