57 lines
1.5 KiB
Plaintext
57 lines
1.5 KiB
Plaintext
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
|