File

spec/util_indexedbheap_spec.lua @ 13439:1e229d710a3c

util.signal: Add support for signalfd(2) on Linux signalfd allows handling signal events using the same method as sockets, via file descriptors. Thus all signal dispatch can go through the same main event loop as everything else, removing need for thread-scary signal handling where execution would just jump to the signal handler regardless of the state of Lua, and needing to keep track of Lua states/threads.
author Kim Alvefur <zash@zash.se>
date Sat, 24 Feb 2024 00:05:29 +0100
parent 11116:d334f2bebe55
line wrap: on
line source

local ibh = require"util.indexedbheap";

local function verify_heap_property(priorities)
	for k in ipairs(priorities) do
		local parent = priorities[k];
		local childA = priorities[2*k];
		local childB = priorities[2*k+1];
		-- print("-", parent, childA, childB)
		assert(childA == nil or childA > parent, "heap property violated");
		assert(childB == nil or childB > parent, "heap property violated");
	end
end

local h
setup(function ()
	h = ibh.create();
end)
describe("util.indexedbheap", function ()
	it("item can be moved from end to top", function ()
		verify_heap_property(h);
		h:insert("a", 1);
		verify_heap_property(h);
		h:insert("b", 2);
		verify_heap_property(h);
		h:insert("c", 3);
		verify_heap_property(h);
		local id = h:insert("*", 10);
		verify_heap_property(h);
		h:reprioritize(id, 0);
		verify_heap_property(h);
		assert.same({ 0, "*", id }, { h:pop() });
	end)
end);