Skip to content
Snippets Groups Projects
Commit 03e1e207 authored by Brady James Garvin's avatar Brady James Garvin
Browse files

Provided test cases for leafy tree balancing.

parent 0bf73905
No related branches found
No related tags found
No related merge requests found
......@@ -232,3 +232,108 @@ QUnit.test('assign heights to vertices in a many-element tree', (assert) => {
assert.deepEqual(tree._root.children[1].children[1].children[0].height, 0);
assert.deepEqual(tree._root.children[1].children[1].children[1].height, 0);
});
function summaries(vertex) {
return [vertex.height, ...vertex.summaryOfLeftmostLeaf, ...vertex.summary];
}
QUnit.test('Perform a single rotation to the left', (assert) => {
const tree = new LeafyTree(KEYED_LIGHTSWITCH_MONOID);
tree.set(0, FLIP);
tree.set(1, FLIP);
tree.set(2, FLIP);
tree.set(3, FLIP);
assert.deepEqual(summaries(tree._root), [2, [0, 0], FLIP, [0, 3], HOLD]);
assert.deepEqual(summaries(tree._root.children[0]), [1, [0, 0], FLIP, [0, 1], HOLD]);
assert.deepEqual(summaries(tree._root.children[0].children[0]), [0, [0, 0], FLIP, [0, 0], FLIP]);
assert.deepEqual(summaries(tree._root.children[0].children[1]), [0, [1, 1], FLIP, [1, 1], FLIP]);
assert.deepEqual(summaries(tree._root.children[1]), [1, [2, 2], FLIP, [2, 3], HOLD]);
assert.deepEqual(summaries(tree._root.children[1].children[0]), [0, [2, 2], FLIP, [2, 2], FLIP]);
assert.deepEqual(summaries(tree._root.children[1].children[1]), [0, [3, 3], FLIP, [3, 3], FLIP]);
});
QUnit.test('Perform a double rotation to the left', (assert) => {
const tree = new LeafyTree(KEYED_LIGHTSWITCH_MONOID);
tree.set(0, FLIP);
tree.set(2, FLIP);
tree.set(3, FLIP);
tree.set(1, FLIP);
assert.deepEqual(summaries(tree._root), [2, [0, 0], FLIP, [0, 3], HOLD]);
assert.deepEqual(summaries(tree._root.children[0]), [1, [0, 0], FLIP, [0, 1], HOLD]);
assert.deepEqual(summaries(tree._root.children[0].children[0]), [0, [0, 0], FLIP, [0, 0], FLIP]);
assert.deepEqual(summaries(tree._root.children[0].children[1]), [0, [1, 1], FLIP, [1, 1], FLIP]);
assert.deepEqual(summaries(tree._root.children[1]), [1, [2, 2], FLIP, [2, 3], HOLD]);
assert.deepEqual(summaries(tree._root.children[1].children[0]), [0, [2, 2], FLIP, [2, 2], FLIP]);
assert.deepEqual(summaries(tree._root.children[1].children[1]), [0, [3, 3], FLIP, [3, 3], FLIP]);
});
QUnit.test('Perform a single rotation to the right', (assert) => {
const tree = new LeafyTree(KEYED_LIGHTSWITCH_MONOID);
tree.set(3, FLIP);
tree.set(2, FLIP);
tree.set(1, FLIP);
tree.set(0, FLIP);
assert.deepEqual(summaries(tree._root), [2, [0, 0], FLIP, [0, 3], HOLD]);
assert.deepEqual(summaries(tree._root.children[0]), [1, [0, 0], FLIP, [0, 1], HOLD]);
assert.deepEqual(summaries(tree._root.children[0].children[0]), [0, [0, 0], FLIP, [0, 0], FLIP]);
assert.deepEqual(summaries(tree._root.children[0].children[1]), [0, [1, 1], FLIP, [1, 1], FLIP]);
assert.deepEqual(summaries(tree._root.children[1]), [1, [2, 2], FLIP, [2, 3], HOLD]);
assert.deepEqual(summaries(tree._root.children[1].children[0]), [0, [2, 2], FLIP, [2, 2], FLIP]);
assert.deepEqual(summaries(tree._root.children[1].children[1]), [0, [3, 3], FLIP, [3, 3], FLIP]);
});
QUnit.test('Perform a double rotation to the right', (assert) => {
const tree = new LeafyTree(KEYED_LIGHTSWITCH_MONOID);
tree.set(3, FLIP);
tree.set(2, FLIP);
tree.set(0, FLIP);
tree.set(1, FLIP);
assert.deepEqual(summaries(tree._root), [2, [0, 0], FLIP, [0, 3], HOLD]);
assert.deepEqual(summaries(tree._root.children[0]), [1, [0, 0], FLIP, [0, 1], HOLD]);
assert.deepEqual(summaries(tree._root.children[0].children[0]), [0, [0, 0], FLIP, [0, 0], FLIP]);
assert.deepEqual(summaries(tree._root.children[0].children[1]), [0, [1, 1], FLIP, [1, 1], FLIP]);
assert.deepEqual(summaries(tree._root.children[1]), [1, [2, 2], FLIP, [2, 3], HOLD]);
assert.deepEqual(summaries(tree._root.children[1].children[0]), [0, [2, 2], FLIP, [2, 2], FLIP]);
assert.deepEqual(summaries(tree._root.children[1].children[1]), [0, [3, 3], FLIP, [3, 3], FLIP]);
});
QUnit.test('Perform a mix of single and double rotations', (assert) => {
const tree = new LeafyTree(KEYED_LIGHTSWITCH_MONOID);
tree.set(12, FLIP);
tree.set(4, FLIP);
tree.set(7, FLIP);
tree.set(1, FLIP);
tree.set(9, FLIP);
tree.set(5, FLIP);
tree.set(3, FLIP);
tree.set(0, FLIP);
tree.set(10, FLIP);
tree.set(8, FLIP);
tree.set(6, FLIP);
tree.set(2, FLIP);
tree.set(11, FLIP);
tree.delete(0);
assert.deepEqual(summaries(tree._root), [4, [1, 1], FLIP, [1, 12], HOLD]);
assert.deepEqual(summaries(tree._root.children[0]), [3, [1, 1], FLIP, [1, 7], FLIP]);
assert.deepEqual(summaries(tree._root.children[0].children[0]), [2, [1, 1], FLIP, [1, 4], HOLD]);
assert.deepEqual(summaries(tree._root.children[0].children[0].children[0]), [1, [1, 1], FLIP, [1, 2], HOLD]);
assert.deepEqual(summaries(tree._root.children[0].children[0].children[0].children[0]), [0, [1, 1], FLIP, [1, 1], FLIP]);
assert.deepEqual(summaries(tree._root.children[0].children[0].children[0].children[1]), [0, [2, 2], FLIP, [2, 2], FLIP]);
assert.deepEqual(summaries(tree._root.children[0].children[0].children[1]), [1, [3, 3], FLIP, [3, 4], HOLD]);
assert.deepEqual(summaries(tree._root.children[0].children[0].children[1].children[0]), [0, [3, 3], FLIP, [3, 3], FLIP]);
assert.deepEqual(summaries(tree._root.children[0].children[0].children[1].children[1]), [0, [4, 4], FLIP, [4, 4], FLIP]);
assert.deepEqual(summaries(tree._root.children[0].children[1]), [2, [5, 5], FLIP, [5, 7], FLIP]);
assert.deepEqual(summaries(tree._root.children[0].children[1].children[0]), [0, [5, 5], FLIP, [5, 5], FLIP]);
assert.deepEqual(summaries(tree._root.children[0].children[1].children[1]), [1, [6, 6], FLIP, [6, 7], HOLD]);
assert.deepEqual(summaries(tree._root.children[0].children[1].children[1].children[0]), [0, [6, 6], FLIP, [6, 6], FLIP]);
assert.deepEqual(summaries(tree._root.children[0].children[1].children[1].children[1]), [0, [7, 7], FLIP, [7, 7], FLIP]);
assert.deepEqual(summaries(tree._root.children[1]), [3, [8, 8], FLIP, [8, 12], FLIP]);
assert.deepEqual(summaries(tree._root.children[1].children[0]), [1, [8, 8], FLIP, [8, 9], HOLD]);
assert.deepEqual(summaries(tree._root.children[1].children[0].children[0]), [0, [8, 8], FLIP, [8, 8], FLIP]);
assert.deepEqual(summaries(tree._root.children[1].children[0].children[1]), [0, [9, 9], FLIP, [9, 9], FLIP]);
assert.deepEqual(summaries(tree._root.children[1].children[1]), [2, [10, 10], FLIP, [10, 12], FLIP]);
assert.deepEqual(summaries(tree._root.children[1].children[1].children[0]), [0, [10, 10], FLIP, [10, 10], FLIP]);
assert.deepEqual(summaries(tree._root.children[1].children[1].children[1]), [1, [11, 11], FLIP, [11, 12], HOLD]);
assert.deepEqual(summaries(tree._root.children[1].children[1].children[1].children[0]), [0, [11, 11], FLIP, [11, 11], FLIP]);
assert.deepEqual(summaries(tree._root.children[1].children[1].children[1].children[1]), [0, [12, 12], FLIP, [12, 12], FLIP]);
});
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment