spec/util_indexedbheap_spec.lua
author Kim Alvefur <zash@zash.se>
Wed, 27 Mar 2024 19:33:11 +0100
changeset 13471 c2a476f4712a
parent 11120 d334f2bebe55
permissions -rw-r--r--
util.startup: Fix exiting on pidfile trouble prosody.shutdown() relies on prosody.main_thread, which has not been set yet at this point. Doing a clean shutdown might actually be harmful in case it tears down things set up by the conflicting Prosody, such as the very pidfile we were looking at. Thanks again SigmaTel71 for noticing
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
11119
7d4c292f178e util.indexedbheap: Fix heap datastructure corruption in :reschedule(smaller_value)
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
     1
local ibh = require"util.indexedbheap";
7d4c292f178e util.indexedbheap: Fix heap datastructure corruption in :reschedule(smaller_value)
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
     2
7d4c292f178e util.indexedbheap: Fix heap datastructure corruption in :reschedule(smaller_value)
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
     3
local function verify_heap_property(priorities)
7d4c292f178e util.indexedbheap: Fix heap datastructure corruption in :reschedule(smaller_value)
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
     4
	for k in ipairs(priorities) do
7d4c292f178e util.indexedbheap: Fix heap datastructure corruption in :reschedule(smaller_value)
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
     5
		local parent = priorities[k];
7d4c292f178e util.indexedbheap: Fix heap datastructure corruption in :reschedule(smaller_value)
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
     6
		local childA = priorities[2*k];
7d4c292f178e util.indexedbheap: Fix heap datastructure corruption in :reschedule(smaller_value)
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
     7
		local childB = priorities[2*k+1];
7d4c292f178e util.indexedbheap: Fix heap datastructure corruption in :reschedule(smaller_value)
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
     8
		-- print("-", parent, childA, childB)
7d4c292f178e util.indexedbheap: Fix heap datastructure corruption in :reschedule(smaller_value)
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
     9
		assert(childA == nil or childA > parent, "heap property violated");
7d4c292f178e util.indexedbheap: Fix heap datastructure corruption in :reschedule(smaller_value)
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
    10
		assert(childB == nil or childB > parent, "heap property violated");
7d4c292f178e util.indexedbheap: Fix heap datastructure corruption in :reschedule(smaller_value)
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
    11
	end
7d4c292f178e util.indexedbheap: Fix heap datastructure corruption in :reschedule(smaller_value)
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
    12
end
7d4c292f178e util.indexedbheap: Fix heap datastructure corruption in :reschedule(smaller_value)
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
    13
7d4c292f178e util.indexedbheap: Fix heap datastructure corruption in :reschedule(smaller_value)
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
    14
local h
7d4c292f178e util.indexedbheap: Fix heap datastructure corruption in :reschedule(smaller_value)
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
    15
setup(function ()
7d4c292f178e util.indexedbheap: Fix heap datastructure corruption in :reschedule(smaller_value)
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
    16
	h = ibh.create();
7d4c292f178e util.indexedbheap: Fix heap datastructure corruption in :reschedule(smaller_value)
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
    17
end)
7d4c292f178e util.indexedbheap: Fix heap datastructure corruption in :reschedule(smaller_value)
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
    18
describe("util.indexedbheap", function ()
7d4c292f178e util.indexedbheap: Fix heap datastructure corruption in :reschedule(smaller_value)
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
    19
	it("item can be moved from end to top", function ()
7d4c292f178e util.indexedbheap: Fix heap datastructure corruption in :reschedule(smaller_value)
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
    20
		verify_heap_property(h);
7d4c292f178e util.indexedbheap: Fix heap datastructure corruption in :reschedule(smaller_value)
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
    21
		h:insert("a", 1);
7d4c292f178e util.indexedbheap: Fix heap datastructure corruption in :reschedule(smaller_value)
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
    22
		verify_heap_property(h);
7d4c292f178e util.indexedbheap: Fix heap datastructure corruption in :reschedule(smaller_value)
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
    23
		h:insert("b", 2);
7d4c292f178e util.indexedbheap: Fix heap datastructure corruption in :reschedule(smaller_value)
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
    24
		verify_heap_property(h);
7d4c292f178e util.indexedbheap: Fix heap datastructure corruption in :reschedule(smaller_value)
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
    25
		h:insert("c", 3);
7d4c292f178e util.indexedbheap: Fix heap datastructure corruption in :reschedule(smaller_value)
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
    26
		verify_heap_property(h);
7d4c292f178e util.indexedbheap: Fix heap datastructure corruption in :reschedule(smaller_value)
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
    27
		local id = h:insert("*", 10);
7d4c292f178e util.indexedbheap: Fix heap datastructure corruption in :reschedule(smaller_value)
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
    28
		verify_heap_property(h);
7d4c292f178e util.indexedbheap: Fix heap datastructure corruption in :reschedule(smaller_value)
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
    29
		h:reprioritize(id, 0);
7d4c292f178e util.indexedbheap: Fix heap datastructure corruption in :reschedule(smaller_value)
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
    30
		verify_heap_property(h);
7d4c292f178e util.indexedbheap: Fix heap datastructure corruption in :reschedule(smaller_value)
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
    31
		assert.same({ 0, "*", id }, { h:pop() });
7d4c292f178e util.indexedbheap: Fix heap datastructure corruption in :reschedule(smaller_value)
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
    32
	end)
7d4c292f178e util.indexedbheap: Fix heap datastructure corruption in :reschedule(smaller_value)
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
    33
end);