You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
311 lines
6.5 KiB
311 lines
6.5 KiB
/* 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]) |
|
}) |
|
}) |
|
}) |
|
|
|
|