97 lines
2.2 KiB
JavaScript
97 lines
2.2 KiB
JavaScript
var test = require("tap").test;
|
|
var Heap = require('./binaryheap');
|
|
|
|
test("check order", function (t) {
|
|
var input = [5, 8, 3, 2, 7, 4, 14];
|
|
var output = [2, 3, 4, 5, 7, 8, 14];
|
|
|
|
var heap = new Heap(true);
|
|
input.forEach(function (i) {
|
|
heap.insert({key: i}, i);
|
|
});
|
|
|
|
console.log('foo');
|
|
|
|
t.equal(heap.length, input.length, "heap size matches input");
|
|
|
|
var o = [];
|
|
|
|
for (var i = 0; i < input.length; i++)
|
|
o.push(heap.pop().key)
|
|
|
|
t.equal(o.length, output.length, "heap sorted length matches");
|
|
t.equivalent(o, output, "heap sorted matches expected output");
|
|
|
|
heap = new Heap(false);
|
|
output.reverse();
|
|
|
|
input.forEach(function (i) {
|
|
heap.insert({key: i}, i);
|
|
});
|
|
|
|
t.equal(heap.length, input.length, "heap size matches input");
|
|
|
|
var o = [];
|
|
|
|
for (var i = 0; i < input.length; i++)
|
|
o.push(heap.pop().key)
|
|
|
|
t.equal(o.length, output.length, "heap sorted length matches");
|
|
t.equivalent(o, output, "heap sorted matches expected output");
|
|
|
|
t.end();
|
|
});
|
|
|
|
var tree_count = 9;
|
|
|
|
function getDot() {
|
|
var tree = require('fs').createWriteStream('tree.'+ ++tree_count + '.dot');
|
|
return tree;
|
|
};
|
|
|
|
function printHeap(heap) {
|
|
//rm -f *.dot *.gif && node test && for i in $(ls tree.*.dot); do dot -Tgif $i -o $(basename $i .dot).gif; done && gifsicle --delay=100 --loop *.gif > anim.gif
|
|
//var ds = getDot();
|
|
//heap.print(ds);
|
|
//ds.end();
|
|
};
|
|
|
|
|
|
test("remove arbitrary elements", function (t) {
|
|
var heap = new Heap();
|
|
|
|
var elems = {
|
|
a: { key: 5 },
|
|
b: { key: 7 },
|
|
c: { key: 3 },
|
|
d: { key: 14 },
|
|
e: { key: 8 },
|
|
f: { key: 30 },
|
|
g: { key: 23 },
|
|
h: { key: 1 },
|
|
};
|
|
|
|
Object.keys(elems).forEach(function (key) {
|
|
heap.insert(elems[key], elems[key].key);
|
|
printHeap(heap);
|
|
});
|
|
|
|
heap.remove(elems.e);
|
|
printHeap(heap);
|
|
|
|
t.equal(heap.length, heap.count(heap.root), "length and count should match");
|
|
t.equal(heap.length, Object.keys(elems).length - 1, "should only remove one ndoe");
|
|
printHeap(heap);
|
|
|
|
heap.remove(elems.a);
|
|
t.equal(heap.length, heap.count(heap.root), "length and count should match");
|
|
printHeap(heap);
|
|
|
|
|
|
heap.remove(elems.b);
|
|
t.equal(heap.length, heap.count(heap.root), "length and count should match");
|
|
printHeap(heap);
|
|
|
|
t.end();
|
|
});
|