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.
99 lines
1.9 KiB
Text
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
|