mirror of
https://github.com/meteor/meteor.git
synced 2026-05-02 03:01:46 -04:00
139 lines
3.8 KiB
JavaScript
139 lines
3.8 KiB
JavaScript
Tinytest.add("binary-heap - simple max-heap tests", function (test) {
|
|
var h = new MaxHeap(function (a, b) { return a-b; });
|
|
h.set("a", 1);
|
|
h.set("b", 233);
|
|
h.set("c", -122);
|
|
h.set("d", 0);
|
|
h.set("e", 0);
|
|
|
|
test.equal(h.size(), 5);
|
|
test.equal(h.maxElementId(), "b");
|
|
test.equal(h.get("b"), 233);
|
|
|
|
h.remove("b");
|
|
test.equal(h.size(), 4);
|
|
test.equal(h.maxElementId(), "a");
|
|
h.set("e", 44);
|
|
test.equal(h.maxElementId(), "e");
|
|
test.equal(h.get("b"), null);
|
|
test.isTrue(h.has("a"));
|
|
test.isFalse(h.has("dd"));
|
|
|
|
h.clear();
|
|
test.isFalse(h.has("a"));
|
|
test.equal(h.size(), 0);
|
|
test.equal(h.setDefault("a", 12345), 12345);
|
|
test.equal(h.setDefault("a", 55555), 12345);
|
|
test.equal(h.size(), 1);
|
|
test.equal(h.maxElementId(), "a");
|
|
});
|
|
|
|
Tinytest.add("binary-heap - big test for max-heap", function (test) {
|
|
var positiveNumbers = _.shuffle(_.range(1, 41));
|
|
var negativeNumbers = _.shuffle(_.range(-1, -41, -1));
|
|
var allNumbers = negativeNumbers.concat(positiveNumbers);
|
|
|
|
var heap = new MaxHeap(function (a, b) { return a-b; });
|
|
var output = [];
|
|
|
|
_.each(allNumbers, function (n) { heap.set(n, n); });
|
|
|
|
_.times(positiveNumbers.length + negativeNumbers.length, function () {
|
|
var maxId = heap.maxElementId();
|
|
output.push(heap.get(maxId));
|
|
heap.remove(maxId);
|
|
});
|
|
|
|
allNumbers.sort(function (a, b) { return b-a; });
|
|
|
|
test.equal(output, allNumbers);
|
|
});
|
|
|
|
Tinytest.add("binary-heap - min-max heap tests", function (test) {
|
|
var h = new MinMaxHeap(function (a, b) { return a-b; });
|
|
h.set("a", 1);
|
|
h.set("b", 233);
|
|
h.set("c", -122);
|
|
h.set("d", 0);
|
|
h.set("e", 0);
|
|
|
|
test.equal(h.size(), 5);
|
|
test.equal(h.maxElementId(), "b");
|
|
test.equal(h.get("b"), 233);
|
|
test.equal(h.minElementId(), "c");
|
|
|
|
h.remove("b");
|
|
test.equal(h.size(), 4);
|
|
test.equal(h.minElementId(), "c");
|
|
h.set("e", -123);
|
|
test.equal(h.minElementId(), "e");
|
|
test.equal(h.get("b"), null);
|
|
test.isTrue(h.has("a"));
|
|
test.isFalse(h.has("dd"));
|
|
|
|
h.clear();
|
|
test.isFalse(h.has("a"));
|
|
test.equal(h.size(), 0);
|
|
test.equal(h.setDefault("a", 12345), 12345);
|
|
test.equal(h.setDefault("a", 55555), 12345);
|
|
test.equal(h.size(), 1);
|
|
test.equal(h.maxElementId(), "a");
|
|
test.equal(h.minElementId(), "a");
|
|
});
|
|
|
|
Tinytest.add("binary-heap - big test for min-max-heap", function (test) {
|
|
var N = 500;
|
|
var positiveNumbers = _.shuffle(_.range(1, N + 1));
|
|
var negativeNumbers = _.shuffle(_.range(-1, -N - 1, -1));
|
|
var allNumbers = positiveNumbers.concat(negativeNumbers);
|
|
|
|
var heap = new MinMaxHeap(function (a, b) { return a-b; });
|
|
var output = [];
|
|
|
|
var initialSets = _.clone(allNumbers);
|
|
_.each(allNumbers, function (n) {
|
|
heap.set(n, n);
|
|
heap._selfCheck();
|
|
heap._minHeap._selfCheck();
|
|
});
|
|
|
|
allNumbers = _.shuffle(allNumbers);
|
|
var secondarySets = _.clone(allNumbers);
|
|
|
|
_.each(allNumbers, function (n) {
|
|
heap.set(-n, n);
|
|
heap._selfCheck();
|
|
heap._minHeap._selfCheck();
|
|
});
|
|
|
|
_.times(positiveNumbers.length + negativeNumbers.length, function () {
|
|
var minId = heap.minElementId();
|
|
output.push(heap.get(minId));
|
|
heap.remove(minId);
|
|
heap._selfCheck(); heap._minHeap._selfCheck();
|
|
});
|
|
|
|
test.equal(heap.size(), 0);
|
|
|
|
allNumbers.sort(function (a, b) { return a-b; });
|
|
|
|
var initialTestText = "initial sets: " + initialSets.toString() +
|
|
"; secondary sets: " + secondarySets.toString();
|
|
test.equal(output, allNumbers, initialTestText);
|
|
|
|
_.each(initialSets, function (n) { heap.set(n, n); })
|
|
_.each(secondarySets, function (n) { heap.set(-n, n); });
|
|
|
|
allNumbers.sort(function (a, b) { return b-a; });
|
|
output = [];
|
|
_.times(positiveNumbers.length + negativeNumbers.length, function () {
|
|
var maxId = heap.maxElementId();
|
|
output.push(heap.get(maxId));
|
|
heap.remove(maxId);
|
|
heap._selfCheck(); heap._minHeap._selfCheck();
|
|
});
|
|
|
|
test.equal(output, allNumbers, initialTestText);
|
|
});
|
|
|