forked from Mirrorlandia_minetest/minetest
114 lines
2.5 KiB
Lua
114 lines
2.5 KiB
Lua
|
_G.core = {}
|
||
|
_G.vector = {metatable = {}}
|
||
|
|
||
|
dofile("builtin/common/vector.lua")
|
||
|
dofile("builtin/common/misc_helpers.lua")
|
||
|
|
||
|
function core.get_last_run_mod() return "*test*" end
|
||
|
function core.set_last_run_mod() end
|
||
|
|
||
|
local do_step
|
||
|
function core.register_globalstep(func)
|
||
|
do_step = func
|
||
|
end
|
||
|
|
||
|
dofile("builtin/common/after.lua")
|
||
|
|
||
|
describe("after", function()
|
||
|
it("executes callbacks when expected", function()
|
||
|
local result = ""
|
||
|
core.after(0, function()
|
||
|
result = result .. "a"
|
||
|
end)
|
||
|
core.after(1, function()
|
||
|
result = result .. "b"
|
||
|
end)
|
||
|
core.after(1, function()
|
||
|
result = result .. "c"
|
||
|
end)
|
||
|
core.after(2, function()
|
||
|
result = result .. "d"
|
||
|
end)
|
||
|
local cancel = core.after(2, function()
|
||
|
result = result .. "e"
|
||
|
end)
|
||
|
do_step(0)
|
||
|
assert.same("a", result)
|
||
|
|
||
|
do_step(1)
|
||
|
assert.same("abc", result)
|
||
|
|
||
|
core.after(2, function()
|
||
|
result = result .. "f"
|
||
|
end)
|
||
|
core.after(1, function()
|
||
|
result = result .. "g"
|
||
|
end)
|
||
|
core.after(-1, function()
|
||
|
result = result .. "h"
|
||
|
end)
|
||
|
cancel:cancel()
|
||
|
do_step(1)
|
||
|
assert.same("abchdg", result)
|
||
|
|
||
|
do_step(1)
|
||
|
assert.same("abchdgf", result)
|
||
|
end)
|
||
|
|
||
|
it("defers jobs with delay 0", function()
|
||
|
local result = ""
|
||
|
core.after(0, function()
|
||
|
core.after(0, function()
|
||
|
result = result .. "b"
|
||
|
end)
|
||
|
result = result .. "a"
|
||
|
end)
|
||
|
do_step(1)
|
||
|
assert.same("a", result)
|
||
|
do_step(1)
|
||
|
assert.same("ab", result)
|
||
|
end)
|
||
|
|
||
|
it("passes arguments", function()
|
||
|
core.after(0, function(...)
|
||
|
assert.same(0, select("#", ...))
|
||
|
end)
|
||
|
core.after(0, function(...)
|
||
|
assert.same(4, select("#", ...))
|
||
|
assert.same(1, (select(1, ...)))
|
||
|
assert.same(nil, (select(2, ...)))
|
||
|
assert.same("a", (select(3, ...)))
|
||
|
assert.same(nil, (select(4, ...)))
|
||
|
end, 1, nil, "a", nil)
|
||
|
do_step(0)
|
||
|
end)
|
||
|
|
||
|
it("rejects invalid arguments", function()
|
||
|
assert.has.errors(function() core.after() end)
|
||
|
assert.has.errors(function() core.after(nil, nil) end)
|
||
|
assert.has.errors(function() core.after(0) end)
|
||
|
assert.has.errors(function() core.after(0, nil) end)
|
||
|
assert.has.errors(function() core.after(nil, function() end) end)
|
||
|
assert.has.errors(function() core.after(0 / 0, function() end) end)
|
||
|
end)
|
||
|
|
||
|
-- Make sure that the underlying heap is working correctly
|
||
|
it("can be abused as a heapsort", function()
|
||
|
local t = {}
|
||
|
for i = 1, 1000 do
|
||
|
t[i] = math.random(100)
|
||
|
end
|
||
|
local sorted = table.copy(t)
|
||
|
table.sort(sorted)
|
||
|
local i = 0
|
||
|
for _, v in ipairs(t) do
|
||
|
core.after(v, function()
|
||
|
i = i + 1
|
||
|
assert.equal(v, sorted[i])
|
||
|
end)
|
||
|
end
|
||
|
do_step(math.max(unpack(t)))
|
||
|
assert.equal(#t, i)
|
||
|
end)
|
||
|
end)
|