37 lines
1.1 KiB
Nim
37 lines
1.1 KiB
Nim
# SPDX-FileCopyrightText: ☭ Emery Hemingway
|
|
# SPDX-License-Identifier: Unlicense
|
|
|
|
import std/[asyncdispatch, os, times]
|
|
import preserves, syndicate, syndicate/actors/timers
|
|
|
|
proc now: float64 = getTime().toUnixFloat()
|
|
|
|
proc testTimers(turn: var Turn; ds: Ref) =
|
|
onPublish(turn, ds, ?LaterThan(seconds: now()+1.0)) do:
|
|
stderr.writeLine "slept one second once"
|
|
onPublish(turn, ds, ?LaterThan(seconds: now()+1.0)) do:
|
|
stderr.writeLine "slept one second twice"
|
|
onPublish(turn, ds, ?LaterThan(seconds: now()+1.0)) do:
|
|
stderr.writeLine "slept one second thrice"
|
|
quit()
|
|
spawnTimers(turn, ds)
|
|
|
|
type Args {.preservesDictionary.} = object
|
|
dataspace: Ref
|
|
|
|
proc asInferior: bool =
|
|
commandLineParams() == @["--inferior"]
|
|
|
|
if asInferior():
|
|
stderr.writeLine "connect stdio"
|
|
runActor("test_timers") do (root: Ref; turn: var Turn):
|
|
connectStdio(root, turn)
|
|
during(turn, root, ?Args) do (ds: Ref):
|
|
testTimers(turn, ds)
|
|
else:
|
|
stderr.writeLine "use local dataspace"
|
|
discard bootDataspace("test_timers") do (ds: Ref; turn: var Turn):
|
|
testTimers(turn, ds)
|
|
|
|
for i in 0..10: poll()
|