lean4-htt/tests/elab/async_surface_sleep.lean
Garmelon 08eb78a5b2
chore: switch to new test/bench suite (#12590)
This PR sets up the new integrated test/bench suite. It then migrates
all benchmarks and some related tests to the new suite. There's also
some documentation and some linting.

For now, a lot of the old tests are left alone so this PR doesn't become
even larger than it already is. Eventually, all tests should be migrated
to the new suite though so there isn't a confusing mix of two systems.
2026-02-25 13:51:53 +00:00

99 lines
1.9 KiB
Text

import Std.Internal.Async.Timer
/-
these tests are just some preliminary ones as `async_sleep.lean` already contains extensive tests
for the entire timer state machine and `Async.Timer` is merely a light wrapper around it.
-/
open Std.Internal.IO.Async
def BASE_DURATION : Std.Time.Millisecond.Offset := 10
namespace SleepTest
def oneSleep : IO Unit := do
let task ← go.block
assert! task == 37
where
go : Async Nat := do
let sleep ← Sleep.mk BASE_DURATION
sleep.wait
return 37
def doubleSleep : IO Unit := do
let task ← go.block
assert! task == 37
where
go : Async Nat := do
let sleep ← Sleep.mk BASE_DURATION
sleep.wait
sleep.wait
return 37
def resetSleep : IO Unit := do
let task ← go.block
assert! task == 37
where
go : Async Nat := do
let sleep ← Sleep.mk BASE_DURATION
sleep.wait
sleep.reset
sleep.wait
return 37
def simpleSleep : IO Unit := do
let task ← go.block
assert! task == 37
where
go : Async Nat := do
sleep BASE_DURATION
return 37
#eval oneSleep
#eval doubleSleep
#eval resetSleep
#eval simpleSleep
end SleepTest
namespace IntervalTest
def oneSleep : IO Unit := do
let task ← go.block
assert! task == 37
where
go : Async Nat := do
let interval ← Interval.mk BASE_DURATION
interval.tick
interval.stop
return 37
def doubleSleep : IO Unit := do
let task ← go.block
assert! task == 37
where
go : Async Nat := do
let interval ← Interval.mk BASE_DURATION
interval.tick
interval.tick
interval.stop
return 37
def resetSleep : IO Unit := do
let task ← go.block
assert! task == 37
where
go : Async Nat := do
let interval ← Interval.mk BASE_DURATION
interval.tick
let waiter := interval.tick
interval.reset
waiter
interval.stop
return 37
#eval oneSleep
#eval doubleSleep
#eval resetSleep
end IntervalTest