UNPKG

zo-capped-array

Version:

An efficient fixed-length array implementation

178 lines (146 loc) 4.02 kB
'use strict' let CappedArray = require('../lib/capped-array') let assert = require('chai').assert function checkOrder(ca, order) { assert.equal(ca.length, order.length) for (let i = 0; i < ca.length; i++) { assert.equal(ca.get(i), order[i]) } } describe('array', function () { describe('constructor', function () { it('number', function () { let ca = new CappedArray(3) assert.equal(ca.maxSize, 3) assert.equal(ca.length, 0) }) it('array', function () { let ca = new CappedArray(3, [1, 2]) assert.equal(ca.maxSize, 3) checkOrder(ca, [1, 2]) }) it('large array', function () { let ca = new CappedArray(3, [1, 2, 3, 4, 5, 6]) assert.equal(ca.maxSize, 3) checkOrder(ca, [1, 2, 3]) }) }) it('push', function () { let ca = new CappedArray(3) let cover = ca.push(1) checkOrder(ca, [1]) assert.isUndefined(cover) ca.push(2) ca.push(3) cover = ca.push(4) checkOrder(ca, [2, 3, 4]) assert.equal(cover, 1) }) it('pop', function () { let ca = new CappedArray(3, [1, 2, 3]) assert.equal(ca.pop(), 3) assert.equal(ca.pop(), 2) assert.equal(ca.pop(), 1) }) it('unshift', function () { let ca = new CappedArray(3) let cover = ca.unshift(1) checkOrder(ca, [1]) assert.isUndefined(cover) ca.unshift(2) ca.unshift(3) cover = ca.unshift(4) checkOrder(ca, [4, 3, 2]) assert.equal(cover, 1) }) it('shift', function () { let ca = new CappedArray(3, [1, 2, 3]) assert.equal(ca.shift(), 1) assert.equal(ca.shift(), 2) assert.equal(ca.shift(), 3) }) it('set', function () { let ca = new CappedArray(3, [1, 2, 3]) ca.set(1, 8) checkOrder(ca, [1, 8, 3]) }) it('get', function () { let ca = new CappedArray(3, [1, 2, 3]) assert.equal(ca.get(1), 2) }) it('head', function () { let ca = new CappedArray(3, [1, 2, 3]) assert.equal(ca.head(), 1) }) it('tail', function () { let ca = new CappedArray(3, [1, 2, 3]) assert.equal(ca.tail(), 3) }) it('empty', function () { let ca = new CappedArray(2) assert.isTrue(ca.empty()) ca.push(1) assert.isFalse(ca.empty()) }) it('full', function () { let ca = new CappedArray(2) assert.isFalse(ca.full()) ca.push(1) ca.push(2) assert.isTrue(ca.full()) }) it('clear', function () { let ca = new CappedArray(3, [1, 2, 3]) assert.isFalse(ca.empty()) ca.clear() assert.isTrue(ca.empty()) }) it('forEach', function () { let ca = new CappedArray(3, [1, 2, 3]) let index = 0; ca.forEach((v, i, o) => { assert.equal(index++, i) assert.equal(v, i + 1) assert.equal(o, ca) }) }) it('iterator', function () { let ca = new CappedArray(3, [1, 2, 3]) let index = 1; for (let v of ca) { assert.equal(v, index++) } }) it('entries', function () { let ca = new CappedArray(3, [1, 2, 3]) let index = 0; for (let [i, v] of ca.entries()) { assert.equal(index++, i) assert.equal(v, i + 1) } }) it('all', function () { let ca = new CappedArray(3) ca.push(1) // ca: [1] ca.push(2) // ca: [1,2] ca.push(3) // ca: [1,2,3] ca.push(4) //return:1 ca: [2,3,4] ca.push(5) //return:2 ca: [3,4,5] ca.pop() //return:5 ca: [3,4] checkOrder(ca, [3, 4]) ca.unshift(6) // ca: [6,3,4] ca.unshift(7) //return:4 ca: [7,6,3] ca.shift(7) //return:7 ca: [6,3] checkOrder(ca, [6, 3]) ca.head() //return:6 ca.tail() //return:3 assert.equal(ca.head(), 6) assert.equal(ca.tail(), 3) for (let v of ca) { //v is assigned to 6, 3 in order } for (let v of ca.entries()) { //v is assigned to [0, 6], [1,3] in order } }) })