2021-04-12 01:35:27 -04:00
|
|
|
'use strict';
|
|
|
|
|
|
|
|
const SkipList = require('ep_etherpad-lite/static/js/skiplist');
|
|
|
|
|
|
|
|
describe('skiplist.js', function () {
|
|
|
|
it('rejects null keys', async function () {
|
|
|
|
const skiplist = new SkipList();
|
|
|
|
for (const key of [undefined, null]) {
|
|
|
|
expect(() => skiplist.push({key})).to.throwError();
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
it('rejects duplicate keys', async function () {
|
|
|
|
const skiplist = new SkipList();
|
|
|
|
skiplist.push({key: 'foo'});
|
|
|
|
expect(() => skiplist.push({key: 'foo'})).to.throwError();
|
|
|
|
});
|
2021-04-12 03:43:17 -04:00
|
|
|
|
|
|
|
it('atOffset() returns last entry that touches offset', async function () {
|
|
|
|
const skiplist = new SkipList();
|
|
|
|
const entries = [];
|
|
|
|
let nextId = 0;
|
|
|
|
const makeEntry = (width) => {
|
|
|
|
const entry = {key: `id${nextId++}`, width};
|
|
|
|
entries.push(entry);
|
|
|
|
return entry;
|
|
|
|
};
|
|
|
|
|
|
|
|
skiplist.push(makeEntry(5));
|
|
|
|
expect(skiplist.atOffset(4)).to.be(entries[0]);
|
|
|
|
expect(skiplist.atOffset(5)).to.be(entries[0]);
|
|
|
|
expect(() => skiplist.atOffset(6)).to.throwError();
|
|
|
|
|
|
|
|
skiplist.push(makeEntry(0));
|
|
|
|
expect(skiplist.atOffset(4)).to.be(entries[0]);
|
|
|
|
expect(skiplist.atOffset(5)).to.be(entries[1]);
|
|
|
|
expect(() => skiplist.atOffset(6)).to.throwError();
|
|
|
|
|
|
|
|
skiplist.push(makeEntry(0));
|
|
|
|
expect(skiplist.atOffset(4)).to.be(entries[0]);
|
|
|
|
expect(skiplist.atOffset(5)).to.be(entries[2]);
|
|
|
|
expect(() => skiplist.atOffset(6)).to.throwError();
|
|
|
|
|
|
|
|
skiplist.splice(2, 0, [makeEntry(0)]);
|
|
|
|
expect(skiplist.atOffset(4)).to.be(entries[0]);
|
|
|
|
expect(skiplist.atOffset(5)).to.be(entries[2]);
|
|
|
|
expect(() => skiplist.atOffset(6)).to.throwError();
|
|
|
|
|
|
|
|
skiplist.push(makeEntry(3));
|
|
|
|
expect(skiplist.atOffset(4)).to.be(entries[0]);
|
|
|
|
expect(skiplist.atOffset(5)).to.be(entries[4]);
|
|
|
|
expect(skiplist.atOffset(6)).to.be(entries[4]);
|
|
|
|
});
|
2021-04-12 01:35:27 -04:00
|
|
|
});
|