From a58fa4a2c59968df4fb2ce85da20fd062170a4f8 Mon Sep 17 00:00:00 2001 From: Richard Hansen Date: Mon, 12 Apr 2021 03:43:17 -0400 Subject: [PATCH] tests: Add tests for `SkipList.atOffset()` --- src/tests/frontend/specs/skiplist.js | 36 ++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/src/tests/frontend/specs/skiplist.js b/src/tests/frontend/specs/skiplist.js index 4b2ebd5aa..16b985615 100644 --- a/src/tests/frontend/specs/skiplist.js +++ b/src/tests/frontend/specs/skiplist.js @@ -15,4 +15,40 @@ describe('skiplist.js', function () { skiplist.push({key: 'foo'}); expect(() => skiplist.push({key: 'foo'})).to.throwError(); }); + + 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]); + }); });