blob: 5c8f5044192089a374f0321dc49e122e5c370fc5 [file] [edit]
def assertBEq [BEq α] [ToString α] (caption : String) (actual expected : α) : IO Unit := do
unless actual == expected do
throw <| IO.userError <|
s!"{caption}: expected '{expected}', got '{actual}'"
def test : IO Unit := do
let p1 : IO.Promise Unit ← IO.Promise.new -- resolving queues the task
let p2 : IO.Promise Unit ← IO.Promise.new -- resolved once task is running
let p3 : IO.Promise Unit ← IO.Promise.new -- resolving finishes the task
let t ← BaseIO.mapTask (fun _ => do p2.resolve (); IO.wait p3.result?) p1.result?
assertBEq "p1" (← IO.getTaskState p1.result?) .running
assertBEq "p2" (← IO.getTaskState p2.result?) .running
assertBEq "p3" (← IO.getTaskState p3.result?) .running
assertBEq "t" (← IO.getTaskState t) .waiting
p1.resolve ()
assertBEq "p1" (← IO.getTaskState p1.result?) .finished
let _ ← IO.wait p2.result?
assertBEq "p2" (← IO.getTaskState p2.result?) .finished
assertBEq "t" (← IO.getTaskState t) .running
p3.resolve ()
assertBEq "p3" (← IO.getTaskState p3.result?) .finished
let _ ← IO.wait t
assertBEq "t" (← IO.getTaskState t) .finished
#eval test