Software /
code /
prosody
Changeset
11116:d334f2bebe55
Merge 0.11->trunk
author | Matthew Wild <mwild1@gmail.com> |
---|---|
date | Wed, 30 Sep 2020 07:25:32 +0100 |
parents | 11114:6a608ecb3471 (current diff) 11115:7d4c292f178e (diff) |
children | 11120:b2331f3dfeea |
files | spec/util_indexedbheap_spec.lua |
diffstat | 2 files changed, 20 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/spec/util_indexedbheap_spec.lua Tue Sep 29 15:30:48 2020 +0100 +++ b/spec/util_indexedbheap_spec.lua Wed Sep 30 07:25:32 2020 +0100 @@ -1,15 +1,33 @@ 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 () - pending("item can be moved from end to top", 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);
--- a/util/indexedbheap.lua Tue Sep 29 15:30:48 2020 +0100 +++ b/util/indexedbheap.lua Wed Sep 30 07:25:32 2020 +0100 @@ -23,7 +23,7 @@ local tmp_sync = sync[k]; while k ~= 1 do local parent = math_floor(k/2); - if tmp < self[parent] then break; end + if tmp >= self[parent] then break; end self[k] = self[parent]; sync[k] = sync[parent]; index[sync[k]] = k;