123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114 |
- _G.core = {}
- _G.vector = {metatable = {}}
- dofile("builtin/common/math.lua")
- 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)
|