| /* eslint-env mocha */ |
| /* eslint-disable max-nested-callbacks */ |
| |
| 'use strict' |
| |
| const { assert } = require('chai') |
| const Hoopy = require('.') |
| |
| test('interface is correct', () => { |
| assert.isFunction(Hoopy) |
| assert.lengthOf(Hoopy, 1) |
| assert.throws(() => new Hoopy(0)) |
| assert.doesNotThrow(() => new Hoopy(1)) |
| assert.throws(() => new Hoopy(-1)) |
| assert.throws(() => new Hoopy(1).push()) |
| assert.throws(() => new Hoopy(1).pop()) |
| assert.throws(() => new Hoopy(1).shift()) |
| assert.throws(() => new Hoopy(1).unshift()) |
| }) |
| |
| suite('instantiate, size=1:', () => { |
| let hoopy |
| |
| setup(() => { |
| hoopy = new Hoopy(1) |
| }) |
| |
| test('instance is array', () => { |
| assert.isTrue(Array.isArray(hoopy)) |
| }) |
| |
| test('length is correct', () => { |
| assert.equal(hoopy.length, 1) |
| }) |
| |
| test('[0] is undefined', () => { |
| assert.isUndefined(hoopy[0]) |
| }) |
| |
| test('[1] is undefined', () => { |
| assert.isUndefined(hoopy[1]) |
| }) |
| |
| test('[-1] is undefined', () => { |
| assert.isUndefined(hoopy[-1]) |
| }) |
| |
| test('grow method is implemented', () => { |
| assert.isFunction(hoopy.grow) |
| assert.lengthOf(hoopy.grow, 1) |
| }) |
| |
| test('grow throws if by=0', () => { |
| assert.throws(() => hoopy.grow(0)) |
| }) |
| |
| suite('assign to [0]:', () => { |
| setup(() => { |
| hoopy[0] = 'foo' |
| }) |
| |
| test('[0] is set correctly', () => { |
| assert.equal(hoopy[0], 'foo') |
| }) |
| |
| test('[1] is set correctly', () => { |
| assert.equal(hoopy[1], 'foo') |
| }) |
| |
| test('[-1] is set correctly', () => { |
| assert.equal(hoopy[-1], 'foo') |
| }) |
| |
| suite('assign to [1]:', () => { |
| setup(() => { |
| hoopy[1] = 'bar' |
| }) |
| |
| test('[0] is set correctly', () => { |
| assert.equal(hoopy[0], 'bar') |
| }) |
| |
| test('[1] is set correctly', () => { |
| assert.equal(hoopy[1], 'bar') |
| }) |
| |
| test('[-1] is set correctly', () => { |
| assert.equal(hoopy[-1], 'bar') |
| }) |
| }) |
| |
| suite('grow, by=1:', () => { |
| setup(() => { |
| hoopy.grow(1) |
| }) |
| |
| test('length is correct', () => { |
| assert.equal(hoopy.length, 2) |
| }) |
| |
| test('[0] is set correctly', () => { |
| assert.equal(hoopy[0], 'foo') |
| }) |
| |
| test('[1] is undefined', () => { |
| assert.isUndefined(hoopy[1]) |
| }) |
| |
| test('[-1] is undefined', () => { |
| assert.isUndefined(hoopy[-1]) |
| }) |
| }) |
| }) |
| }) |
| |
| suite('instantiate, size=2:', () => { |
| let hoopy |
| |
| setup(() => { |
| hoopy = new Hoopy(2) |
| }) |
| |
| test('length is correct', () => { |
| assert.equal(hoopy.length, 2) |
| }) |
| |
| suite('assign to [0]:', () => { |
| setup(() => { |
| hoopy[0] = 'foo' |
| }) |
| |
| test('[0] is set correctly', () => { |
| assert.equal(hoopy[0], 'foo') |
| }) |
| |
| test('[1] is undefined', () => { |
| assert.isUndefined(hoopy[1]) |
| }) |
| |
| test('[2] is set correctly', () => { |
| assert.equal(hoopy[2], 'foo') |
| }) |
| |
| test('[3] is undefined', () => { |
| assert.isUndefined(hoopy[3]) |
| }) |
| |
| test('[-1] is undefined', () => { |
| assert.isUndefined(hoopy[-1]) |
| }) |
| |
| suite('assign to [1]:', () => { |
| setup(() => { |
| hoopy[1] = 'bar' |
| }) |
| |
| test('[0] is set correctly', () => { |
| assert.equal(hoopy[0], 'foo') |
| }) |
| |
| test('[1] is set correctly', () => { |
| assert.equal(hoopy[1], 'bar') |
| }) |
| |
| test('[2] is set correctly', () => { |
| assert.equal(hoopy[2], 'foo') |
| }) |
| |
| test('[-1] is set correctly', () => { |
| assert.equal(hoopy[-1], 'bar') |
| }) |
| |
| suite('assign to [2]:', () => { |
| setup(() => { |
| hoopy[2] = 'baz' |
| }) |
| |
| test('[0] is set correctly', () => { |
| assert.equal(hoopy[0], 'baz') |
| }) |
| |
| test('[1] is set correctly', () => { |
| assert.equal(hoopy[1], 'bar') |
| }) |
| |
| test('[2] is set correctly', () => { |
| assert.equal(hoopy[2], 'baz') |
| }) |
| |
| test('[-1] is set correctly', () => { |
| assert.equal(hoopy[-1], 'bar') |
| }) |
| |
| suite('grow, by=1:', () => { |
| setup(() => { |
| hoopy.grow(1) |
| }) |
| |
| test('length is correct', () => { |
| assert.equal(hoopy.length, 3) |
| }) |
| |
| test('[0] is undefined', () => { |
| assert.isUndefined(hoopy[0]) |
| }) |
| |
| test('[1] is set correctly', () => { |
| assert.equal(hoopy[1], 'bar') |
| }) |
| |
| test('[2] is set correctly', () => { |
| assert.equal(hoopy[2], 'baz') |
| }) |
| |
| test('[3] is undefined', () => { |
| assert.isUndefined(hoopy[3]) |
| }) |
| }) |
| |
| suite('grow, by=2:', () => { |
| setup(() => { |
| hoopy.grow(2) |
| }) |
| |
| test('length is correct', () => { |
| assert.equal(hoopy.length, 4) |
| }) |
| |
| test('[0] is undefined', () => { |
| assert.isUndefined(hoopy[0]) |
| }) |
| |
| test('[1] is set correctly', () => { |
| assert.equal(hoopy[1], 'bar') |
| }) |
| |
| test('[2] is set correctly', () => { |
| assert.equal(hoopy[2], 'baz') |
| }) |
| |
| test('[3] is undefined', () => { |
| assert.isUndefined(hoopy[3]) |
| }) |
| |
| test('[4] is undefined', () => { |
| assert.isUndefined(hoopy[4]) |
| }) |
| |
| test('[5] is set correctly', () => { |
| assert.equal(hoopy[5], 'bar') |
| }) |
| }) |
| }) |
| }) |
| }) |
| }) |
| |
| suite('instantiate and overflow, size=3:', () => { |
| let hoopy |
| |
| setup(() => { |
| hoopy = new Hoopy(3) |
| hoopy[2] = 'foo' |
| hoopy[3] = 'bar' |
| hoopy[4] = 'baz' |
| }) |
| |
| test('data is correct', () => { |
| assert.equal(hoopy.length, 3) |
| assert.equal(hoopy[2], 'foo') |
| assert.equal(hoopy[3], 'bar') |
| assert.equal(hoopy[4], 'baz') |
| assert.equal(hoopy[0], hoopy[3]) |
| assert.equal(hoopy[1], hoopy[4]) |
| }) |
| |
| test('slice works correctly', () => { |
| assert.equal(hoopy.slice(0, 3)[2], hoopy[2]) |
| }) |
| |
| suite('grow, by=1:', () => { |
| setup(() => { |
| hoopy.grow(1) |
| }) |
| |
| test('data is correct', () => { |
| assert.equal(hoopy.length, 4) |
| assert.equal(hoopy[2], 'foo') |
| assert.equal(hoopy[3], 'bar') |
| assert.equal(hoopy[4], 'baz') |
| assert.equal(hoopy[0], hoopy[4]) |
| assert.isUndefined(hoopy[1]) |
| }) |
| }) |
| |
| suite('grow, by=2:', () => { |
| setup(() => { |
| hoopy.grow(2) |
| }) |
| |
| test('data is correct', () => { |
| assert.equal(hoopy.length, 5) |
| assert.equal(hoopy[2], 'foo') |
| assert.equal(hoopy[3], 'bar') |
| assert.equal(hoopy[4], 'baz') |
| assert.isUndefined(hoopy[0]) |
| assert.isUndefined(hoopy[1]) |
| }) |
| }) |
| }) |
| |