web/visualization.js
Matej Focko 030cd9a701
feat: add predefined scenarios to visualization
Fixes #3

Signed-off-by: Matej Focko <mfocko@redhat.com>
2022-05-16 18:23:05 +02:00

104 lines
2.2 KiB
JavaScript

let recorder = new Recorder(
d3.select("#graph").graphviz(),
document.getElementById("comment"),
"graph"
);
let tree = new WAVLTree();
tree.recorder = recorder;
function insertCallback() {
let number = document.getElementById("insertInput").value;
if (number === "") {
return false;
}
let value = parseInt(number);
tree.insert(value);
document.getElementById("insertInput").value = "";
return false;
}
function deleteCallback() {
let number = document.getElementById("deleteInput").value;
if (number === "") {
return false;
}
let value = parseInt(number);
tree.delete(value);
document.getElementById("deleteInput").value = "";
return false;
}
function switchTree(TreeType) {
tree = new TreeType();
tree.recorder = recorder;
recorder.clear();
tree.record("");
}
// #region prepared scenarios
function prepareSingleRotationAfterDelete() {
let newTree = new WAVLTree();
for (let key of [0, 1, 2, -1]) {
newTree.insert(key);
}
document.getElementById("wavlTreeBtn").checked = true;
tree = newTree;
tree.recorder = recorder;
recorder.clear();
tree.record("Prepare tree");
document.getElementById("deleteInput").value = 2;
}
function prepareDoubleRotationAfterDelete() {
let newTree = new WAVLTree();
for (let key of [0, -7, 1, -1]) {
newTree.insert(key);
}
document.getElementById("wavlTreeBtn").checked = true;
tree = newTree;
tree.recorder = recorder;
recorder.clear();
tree.record("Prepare tree");
document.getElementById("deleteInput").value = 1;
}
function prepareDemotionOfBothNodesDuringDelete() {
let newTree = new WAVLTree();
for (let key of [0, 1, 2, 3, -2, -3, -1]) {
newTree.insert(key);
}
for (let key of [-2]) {
newTree.delete(key);
}
document.getElementById("wavlTreeBtn").checked = true;
tree = newTree;
tree.recorder = recorder;
recorder.clear();
tree.record("Prepare tree");
document.getElementById("deleteInput").value = 2;
}
// #endregion prepared scenarios
function render() {
recorder.render();
setTimeout(render);
}
render();