mirror of
				https://github.com/luanti-org/luanti.git
				synced 2025-10-28 22:25:20 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			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)
 |