flo-ll-rb-tree
Version:
A simple left leaning red black tree implementation.
80 lines (60 loc) • 1.61 kB
text/typescript
import { assert, expect } from 'chai';
import { describe } from 'mocha';
import { LlRbTree } from '../../src/index.js';
import { countNodes } from '../helpers/count-nodes.js';
import { countValues } from '../helpers/count-values.js';
const max = Math.max;
interface Interval {
tS: number;
tE: number;
hL: number;
hR: number;
hEL: number;
hER: number;
}
const initialInterval = {
tS: 0, tE: 1,
hL: 0, hR: 0,
hEL: Number.POSITIVE_INFINITY,
hER: Number.POSITIVE_INFINITY
}
function compare(a: Interval, b: Interval) {
const diff = (
max(a.hL + a.hEL, a.hR + a.hER) -
max(b.hL + b.hEL, b.hR + b.hER)
);
if (Number.isNaN(diff)) { return 0; }
return diff;
}
const iL = {
tS: 0,
tE: 0.5,
hL: 0,
hR: 0.3851983968628731,
hEL: 0.43694591235438646,
hER: 0.1764283253376686
};
const iR = {
tS: 0.5,
tE: 1,
hL: 0.3851983968628731,
hR: 0,
hEL: 0.11991924679920472,
hER: 0.2808091367496658
}
describe('Special cases', function() {
it('it should pass some special cases',
function() {
let tree = new LlRbTree(compare, true, [initialInterval]);
const interval = tree.max()!;
tree.remove(interval);
tree.insert(iL);
tree.insert(iL);
tree.insert(iL);
tree.insert(iR);
const nodeCount = countNodes(tree);
const valCount = countValues(tree);
expect(nodeCount).to.eql(2);
expect(valCount).to.eql(4);
});
});