lune/src/tests/task/wait.luau

56 lines
1.2 KiB
Text
Raw Normal View History

2023-01-22 19:44:23 +00:00
-- Wait should be accurate down to at least 10ms
2023-01-21 18:33:33 +00:00
local EPSILON = 1 / 100
2023-01-22 19:44:23 +00:00
local function test(expected: number)
2023-01-21 18:33:33 +00:00
local start = os.clock()
local returned = task.wait(expected)
local elapsed = (os.clock() - start)
local difference = math.abs(elapsed - returned)
if difference > EPSILON then
error(
string.format(
"Elapsed time diverged too much from argument!"
.. "\nGot argument of %.3fs and elapsed time of %.3fs"
.. "\nGot maximum difference of %.3fs and real difference of %.3fs",
2023-01-22 19:44:23 +00:00
expected,
2023-01-21 18:33:33 +00:00
elapsed,
EPSILON,
difference
)
)
end
end
2023-01-22 19:44:23 +00:00
local function measure(duration: number)
2023-01-21 18:33:33 +00:00
for _ = 1, 5 do
test(duration)
end
end
measure(1 / 100)
measure(1 / 60)
measure(1 / 30)
measure(1 / 20)
measure(1 / 10)
2023-01-22 19:44:23 +00:00
-- Wait should work in other threads, too
local flag: boolean = false
2023-01-23 00:25:36 +00:00
task.spawn(function()
2023-01-22 19:44:23 +00:00
task.wait(0.1)
flag = true
2023-01-23 00:25:36 +00:00
end)
assert(not flag, "Wait failed for a task-spawned thread (1)")
task.wait(0.2)
assert(flag, "Wait failed for a task-spawned thread (2)")
local flag2: boolean = false
coroutine.wrap(function()
task.wait(0.1)
flag2 = true
2023-01-22 19:44:23 +00:00
end)()
2023-01-23 00:25:36 +00:00
assert(not flag2, "Wait failed for a coroutine (1)")
task.wait(0.2)
assert(flag2, "Wait failed for a coroutine (2)")