You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
263 lines
9.2 KiB
JavaScript
263 lines
9.2 KiB
JavaScript
"use strict";
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
const index_1 = require("./index");
|
|
describe('values', () => {
|
|
it('should create an iterator of values', () => {
|
|
const d = new index_1.Deque('abc');
|
|
const values = Array.from(d);
|
|
expect(values).toEqual(Array.from('abc'));
|
|
});
|
|
it('should support `Set`-like iterable methods', () => {
|
|
const d = new index_1.Deque('abc');
|
|
expect(Array.from(d.entries())).toEqual(Array.from('abc'));
|
|
expect(Array.from(d.keys())).toEqual(Array.from('abc'));
|
|
expect(Array.from(d.values())).toEqual(Array.from('abc'));
|
|
});
|
|
});
|
|
describe('push', () => {
|
|
it('should push a value on the right', () => {
|
|
const d = new index_1.Deque();
|
|
d.push('a');
|
|
expect(Array.from(d)).toEqual(Array.from('a'));
|
|
d.push('b');
|
|
expect(Array.from(d)).toEqual(Array.from('ab'));
|
|
d.push('c');
|
|
expect(Array.from(d)).toEqual(Array.from('abc'));
|
|
});
|
|
});
|
|
describe('pushLeft', () => {
|
|
it('should push a value on the left', () => {
|
|
const d = new index_1.Deque();
|
|
d.pushLeft('a');
|
|
expect(Array.from(d)).toEqual(Array.from('a'));
|
|
d.pushLeft('b');
|
|
expect(Array.from(d)).toEqual(Array.from('ba'));
|
|
d.pushLeft('c');
|
|
expect(Array.from(d)).toEqual(Array.from('cba'));
|
|
});
|
|
});
|
|
describe('extend', () => {
|
|
it('should extend to the right', () => {
|
|
const d = new index_1.Deque('abc');
|
|
d.extend('def');
|
|
expect(Array.from(d)).toEqual(Array.from('abcdef'));
|
|
});
|
|
});
|
|
describe('extendLeft', () => {
|
|
it('should extend to the left', () => {
|
|
const d = new index_1.Deque('def');
|
|
d.extendLeft('cba');
|
|
expect(Array.from(d)).toEqual(Array.from('abcdef'));
|
|
});
|
|
});
|
|
describe('pop', () => {
|
|
it('should pop right value', () => {
|
|
const d = new index_1.Deque('abcde');
|
|
expect(Array.from(d)).toEqual(['a', 'b', 'c', 'd', 'e']);
|
|
expect(d.pop()).toEqual('e');
|
|
expect(Array.from(d)).toEqual(['a', 'b', 'c', 'd']);
|
|
expect(d.pop()).toEqual('d');
|
|
expect(Array.from(d)).toEqual(['a', 'b', 'c']);
|
|
expect(d.pop()).toEqual('c');
|
|
expect(Array.from(d)).toEqual(['a', 'b']);
|
|
expect(d.pop()).toEqual('b');
|
|
expect(Array.from(d)).toEqual(['a']);
|
|
expect(d.pop()).toEqual('a');
|
|
});
|
|
it('should not pop empty deque', () => {
|
|
const d = new index_1.Deque();
|
|
expect(() => d.pop()).toThrow(RangeError);
|
|
});
|
|
});
|
|
describe('popLeft', () => {
|
|
it('should pop left value', () => {
|
|
const d = new index_1.Deque('abcde');
|
|
expect(Array.from(d)).toEqual(['a', 'b', 'c', 'd', 'e']);
|
|
expect(d.popLeft()).toEqual('a');
|
|
expect(Array.from(d)).toEqual(['b', 'c', 'd', 'e']);
|
|
expect(d.popLeft()).toEqual('b');
|
|
expect(Array.from(d)).toEqual(['c', 'd', 'e']);
|
|
expect(d.popLeft()).toEqual('c');
|
|
expect(Array.from(d)).toEqual(['d', 'e']);
|
|
expect(d.popLeft()).toEqual('d');
|
|
expect(Array.from(d)).toEqual(['e']);
|
|
expect(d.popLeft()).toEqual('e');
|
|
});
|
|
it('should not pop left empty deque', () => {
|
|
const d = new index_1.Deque();
|
|
expect(() => d.popLeft()).toThrow(RangeError);
|
|
});
|
|
});
|
|
describe('peek', () => {
|
|
it('should peek values', () => {
|
|
const d = new index_1.Deque('abc');
|
|
expect(d.peek(0)).toEqual('a');
|
|
expect(d.peek(1)).toEqual('b');
|
|
expect(d.peek(2)).toEqual('c');
|
|
expect(d.peek(-1)).toEqual('c');
|
|
expect(d.peek(-2)).toEqual('b');
|
|
expect(d.peek(-3)).toEqual('a');
|
|
expect(() => d.peek(3)).toThrow(RangeError);
|
|
expect(() => d.peek(-4)).toThrow(RangeError);
|
|
});
|
|
it('should throw on non range', () => {
|
|
const d = new index_1.Deque('abc');
|
|
expect(() => d.peek('a')).toThrow(RangeError);
|
|
});
|
|
it('should throw on empty deque', () => {
|
|
const d = new index_1.Deque();
|
|
expect(() => d.peek(0)).toThrow(RangeError);
|
|
});
|
|
});
|
|
describe('clear', () => {
|
|
it('should clear a deque', () => {
|
|
const d = new index_1.Deque('abc');
|
|
expect(Array.from(d)).toEqual(Array.from('abc'));
|
|
d.clear();
|
|
expect(Array.from(d)).toEqual([]);
|
|
expect(() => d.peek(0)).toThrow(RangeError);
|
|
});
|
|
});
|
|
describe('indexOf', () => {
|
|
it('should search for the position of a value', () => {
|
|
const d = new index_1.Deque('abc');
|
|
expect(d.indexOf('a')).toEqual(0);
|
|
expect(d.indexOf('b')).toEqual(1);
|
|
expect(d.indexOf('c')).toEqual(2);
|
|
expect(d.indexOf('d')).toEqual(-1);
|
|
});
|
|
it('should search from offset', () => {
|
|
const d = new index_1.Deque('abcdef');
|
|
expect(d.indexOf('a', 2)).toEqual(-1);
|
|
expect(d.indexOf('a', 1)).toEqual(-1);
|
|
expect(d.indexOf('a', 0)).toEqual(0);
|
|
expect(d.indexOf('b', 1)).toEqual(1);
|
|
expect(d.indexOf('c', 2)).toEqual(2);
|
|
expect(d.indexOf('d', 3)).toEqual(3);
|
|
expect(d.indexOf('e', 4)).toEqual(4);
|
|
expect(d.indexOf('f', 5)).toEqual(5);
|
|
expect(d.indexOf('a', 6)).toEqual(-1);
|
|
expect(d.indexOf('a', -1)).toEqual(-1);
|
|
expect(d.indexOf('a', -5)).toEqual(-1);
|
|
expect(d.indexOf('f', -1)).toEqual(5);
|
|
expect(d.indexOf('a', -6)).toEqual(0);
|
|
expect(d.indexOf('a', -10)).toEqual(0);
|
|
});
|
|
});
|
|
describe('has', () => {
|
|
it('should search for a value', () => {
|
|
const d = new index_1.Deque('abc');
|
|
expect(d.has('a')).toEqual(true);
|
|
expect(d.has('b')).toEqual(true);
|
|
expect(d.has('c')).toEqual(true);
|
|
expect(d.has('d')).toEqual(false);
|
|
});
|
|
});
|
|
describe('insert', () => {
|
|
it('should insert an element at position', () => {
|
|
const d = new index_1.Deque();
|
|
d.insert(0, 'b');
|
|
d.insert(1, 'd');
|
|
d.insert(1, 'c');
|
|
d.insert(0, 'a');
|
|
expect(Array.from(d)).toEqual(Array.from('abcd'));
|
|
});
|
|
it('should insert at the tail each time', () => {
|
|
const d = new index_1.Deque();
|
|
d.insert(0, 'a');
|
|
d.insert(1, 'b');
|
|
d.insert(2, 'c');
|
|
d.insert(3, 'd');
|
|
d.insert(4, 'e');
|
|
expect(Array.from(d)).toEqual(Array.from('abcde'));
|
|
});
|
|
});
|
|
describe('delete', () => {
|
|
it('should delete value at index', () => {
|
|
const d = new index_1.Deque('abc');
|
|
d.delete(1);
|
|
expect(Array.from(d)).toEqual(Array.from('ac'));
|
|
expect(() => d.delete(-1)).toThrowError(RangeError);
|
|
d.delete(0);
|
|
expect(Array.from(d)).toEqual(Array.from('c'));
|
|
expect(() => d.delete(1)).toThrowError(RangeError);
|
|
d.delete(0);
|
|
expect(Array.from(d)).toEqual([]);
|
|
expect(() => d.delete(0)).toThrowError(RangeError);
|
|
});
|
|
it('should throw when deleting empty deque', () => {
|
|
const d = new index_1.Deque();
|
|
expect(() => d.delete(0)).toThrow(RangeError);
|
|
});
|
|
});
|
|
describe('reverse', () => {
|
|
it('should reverse a deque', () => {
|
|
const d = new index_1.Deque('abcde');
|
|
d.reverse();
|
|
expect(Array.from(d)).toEqual(Array.from('edcba'));
|
|
});
|
|
it('should reverse an empty deque', () => {
|
|
const d = new index_1.Deque();
|
|
d.reverse();
|
|
expect(Array.from(d)).toEqual([]);
|
|
});
|
|
it('should reverse a deque with one element', () => {
|
|
const d = new index_1.Deque('a');
|
|
d.reverse();
|
|
expect(Array.from(d)).toEqual(['a']);
|
|
});
|
|
it('should reverse a rotated deque', () => {
|
|
const d = new index_1.Deque('abcdefghi');
|
|
d.rotate(5);
|
|
expect(Array.from(d)).toEqual(Array.from('efghiabcd'));
|
|
d.reverse();
|
|
expect(Array.from(d)).toEqual(Array.from('dcbaihgfe'));
|
|
});
|
|
});
|
|
describe('rotate', () => {
|
|
it('should rotate a deque', () => {
|
|
const d = new index_1.Deque('abcde');
|
|
d.rotate(2);
|
|
expect(Array.from(d)).toEqual(Array.from('deabc'));
|
|
d.rotate(-3);
|
|
expect(Array.from(d)).toEqual(Array.from('bcdea'));
|
|
d.rotate(6);
|
|
expect(Array.from(d)).toEqual(Array.from('abcde'));
|
|
});
|
|
it('should rotate on empty deque', () => {
|
|
const d = new index_1.Deque();
|
|
d.rotate();
|
|
expect(Array.from(d)).toEqual([]);
|
|
});
|
|
});
|
|
describe('size', () => {
|
|
it('should give the deque size', () => {
|
|
const d = new index_1.Deque('abcdef');
|
|
expect(d.size).toEqual(6);
|
|
d.rotate(3);
|
|
expect(d.size).toEqual(6);
|
|
});
|
|
});
|
|
describe('array resize', () => {
|
|
it('should resize array as required', () => {
|
|
const d = new index_1.Deque();
|
|
d.extend('abcd');
|
|
expect(d.pop()).toEqual('d');
|
|
expect(d.pop()).toEqual('c');
|
|
expect(d.pop()).toEqual('b');
|
|
expect(d.pop()).toEqual('a');
|
|
expect(() => d.pop()).toThrow(RangeError);
|
|
d.extend('efgh');
|
|
d.extend('ijkl');
|
|
expect(d.popLeft()).toEqual('e');
|
|
expect(d.popLeft()).toEqual('f');
|
|
expect(d.popLeft()).toEqual('g');
|
|
expect(d.popLeft()).toEqual('h');
|
|
expect(d.popLeft()).toEqual('i');
|
|
expect(d.popLeft()).toEqual('j');
|
|
expect(d.popLeft()).toEqual('k');
|
|
expect(d.popLeft()).toEqual('l');
|
|
expect(() => d.popLeft()).toThrow(RangeError);
|
|
});
|
|
});
|
|
//# sourceMappingURL=index.spec.js.map
|