Pantograph/Test/Serial.lean

57 lines
1.5 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import LSpec
import Test.Common
import Lean
import Pantograph.Library
open Lean
namespace Pantograph.Test.Serial
structure MultiState where
coreContext : Core.Context
coreStates : Array Core.State
abbrev TestM := StateRefT MultiState $ TestT $ EIO LSpec.TestSeq
def runCoreM { α } (id : Nat) (testCoreM: TestT CoreM α) : TestM α := do
let multiState ← get
let state ← match multiState.coreStates[id]? with
| .some state => pure state
| .none =>
let test := LSpec.test "Invalid index" (id < multiState.coreStates.size)
throw test
let coreM := runTestWithResult testCoreM
match ← (coreM.run' multiState.coreContext state).toBaseIO with
| .error _ => do
let test := LSpec.test "Exception" false
throw test
| .ok (a, tests) => do
set $ (← getThe LSpec.TestSeq) ++ tests
return a
def simple : TestM Unit := do
return
structure Test where
name : String
nInstances : Nat
routine: TestM Unit
protected def Test.run (test: Test) (env: Lean.Environment) : IO LSpec.TestSeq := do
-- Create the state
let state : MultiState := {
coreContext := ← createCoreContext #[],
coreStates := Array.range test.nInstances |>.map λ _ => { env },
}
match ← (runTest $ test.routine.run' state).toBaseIO with
| .ok e => return e
| .error e => return e
def suite (env : Lean.Environment): List (String × IO LSpec.TestSeq) :=
let tests: List Test := [
{ name := "simple", nInstances := 2, routine := simple }
]
tests.map (fun test => (test.name, test.run env))
end Pantograph.Test.Serial