// tslint:disable: no-implicit-dependencies max-func-body-length no-unused-expression no-require-imports no-var-requires import chai from 'chai'; import { RingBuffer } from '../../../../session/utils/RingBuffer'; const { expect } = chai; describe('RingBuffer Utils', () => { it('gets created with right capacity', () => { const ring = new RingBuffer(5000); expect(ring.getCapacity()).to.equal(5000); expect(ring.getLength()).to.equal(0); expect(ring.has(0)).to.equal(false, '0 should not be there'); }); describe('length & capacity are right', () => { it('length is right 0', () => { const ring = new RingBuffer(4); expect(ring.getLength()).to.equal(0); }); it('length is right 1', () => { const ring = new RingBuffer(4); ring.insert(0); expect(ring.getLength()).to.equal(1); }); it('length is right 4', () => { const ring = new RingBuffer(4); ring.insert(0); ring.insert(1); ring.insert(2); ring.insert(3); expect(ring.getLength()).to.equal(4); }); it('capacity does not get exceeded', () => { const ring = new RingBuffer(4); ring.insert(0); ring.insert(1); ring.insert(2); ring.insert(3); ring.insert(4); expect(ring.getLength()).to.equal(4); }); }); describe('isEmpty is correct', () => { it('no items', () => { const ring = new RingBuffer(4); expect(ring.isEmpty()).to.equal(true, 'no items isEmpty should be true'); }); it('length is right 1', () => { const ring = new RingBuffer(4); ring.insert(0); expect(ring.isEmpty()).to.equal(false, '1 item isEmpty should be false'); }); it('length is right 4', () => { const ring = new RingBuffer(4); ring.insert(0); ring.insert(1); ring.insert(2); ring.insert(3); expect(ring.isEmpty()).to.equal(false, '4 items isEmpty should be false'); }); it('more than capacity', () => { const ring = new RingBuffer(4); ring.insert(0); ring.insert(1); ring.insert(2); ring.insert(3); ring.insert(4); expect(ring.isEmpty()).to.equal(false, '5 item isEmpty should be false'); }); }); it('items are removed in order 1', () => { const ring = new RingBuffer(4); ring.insert(0); ring.insert(1); ring.insert(2); ring.insert(3); ring.insert(4); expect(ring.has(0)).to.equal(false, '0 should not be there anymore'); expect(ring.has(1)).to.equal(true, '1 should still be there'); expect(ring.has(2)).to.equal(true, '2 should still be there'); expect(ring.has(3)).to.equal(true, '3 should still be there'); expect(ring.has(4)).to.equal(true, '4 should still be there'); }); it('two times the same items can exist', () => { const ring = new RingBuffer(4); ring.insert(0); ring.insert(1); ring.insert(2); ring.insert(1); ring.insert(4); expect(ring.has(0)).to.equal(false, '0 should not be there anymore'); expect(ring.has(1)).to.equal(true, '1 should still be there'); expect(ring.has(2)).to.equal(true, '2 should still be there'); expect(ring.has(3)).to.equal(false, '3 should not be there'); expect(ring.has(4)).to.equal(true, '4 should still be there'); }); it('items are removed in order completely', () => { const ring = new RingBuffer(4); ring.insert(0); ring.insert(1); ring.insert(2); ring.insert(3); ring.insert(10); ring.insert(20); ring.insert(30); ring.insert(40); expect(ring.has(0)).to.equal(false, '0 should not be there anymore'); expect(ring.has(1)).to.equal(false, '1 should not be there'); expect(ring.has(2)).to.equal(false, '2 should not be there'); expect(ring.has(3)).to.equal(false, '3 should not be there'); expect(ring.has(4)).to.equal(false, '4 should not be there'); expect(ring.has(10)).to.equal(true, '10 should still be there'); expect(ring.has(20)).to.equal(true, '20 should still be there'); expect(ring.has(30)).to.equal(true, '30 should still be there'); expect(ring.has(40)).to.equal(true, '40 should still be there'); }); it('clear empties the list but keeps the capacity', () => { const ring = new RingBuffer(4); ring.insert(0); ring.insert(1); ring.insert(2); ring.insert(1); expect(ring.getLength()).to.equal(4); expect(ring.getCapacity()).to.equal(4); ring.clear(); expect(ring.getCapacity()).to.equal(4); expect(ring.getLength()).to.equal(0); }); describe('toArray', () => { it('empty buffer', () => { const ring = new RingBuffer(4); expect(ring.toArray()).to.deep.eq([]); }); it('with 1', () => { const ring = new RingBuffer(4); ring.insert(0); expect(ring.toArray()).to.deep.eq([0]); }); it('with 4', () => { const ring = new RingBuffer(4); ring.insert(0); ring.insert(1); ring.insert(2); ring.insert(3); expect(ring.toArray()).to.deep.eq([0, 1, 2, 3]); }); it('with 5', () => { const ring = new RingBuffer(4); ring.insert(0); ring.insert(1); ring.insert(2); ring.insert(3); ring.insert(4); expect(ring.toArray()).to.deep.eq([1, 2, 3, 4]); }); it('more than 2 full laps erasing data', () => { const ring = new RingBuffer(4); ring.insert(0); ring.insert(1); ring.insert(2); ring.insert(3); ring.insert(4); // first lap first item ring.insert(5); ring.insert(6); // first item in toArray should be this one ring.insert(7); ring.insert(8); // second lap first item ring.insert(9); expect(ring.toArray()).to.deep.eq([6, 7, 8, 9]); }); }); describe('clear', () => { it('empty buffer', () => { const ring = new RingBuffer(4); ring.clear(); expect(ring.getCapacity()).to.deep.eq(4); expect(ring.getLength()).to.deep.eq(0); }); it('with 1', () => { const ring = new RingBuffer(4); ring.insert(0); ring.clear(); expect(ring.getCapacity()).to.deep.eq(4); expect(ring.getLength()).to.deep.eq(0); }); it('with 5', () => { const ring = new RingBuffer(4); ring.insert(0); ring.insert(1); ring.insert(2); ring.insert(3); ring.insert(4); ring.clear(); expect(ring.getCapacity()).to.deep.eq(4); expect(ring.getLength()).to.deep.eq(0); }); }); });