Merge branch 'limitedarray' into 'development'

Added limitedArray.ts and tests

See merge request martind2000/utils!2
This commit is contained in:
Martin Donnelly 2021-05-20 23:09:33 +00:00
commit 22d103dc62
4 changed files with 137 additions and 1 deletions

View File

@ -1,6 +1,6 @@
{
"name": "@rakh/utils",
"version": "2.0.4",
"version": "2.0.5",
"main": "dist/commonjs/index.js",
"module": "dist/es/index.js",
"jsnext:main": "dist/es/index.js",

View File

@ -9,6 +9,7 @@ export * from './hasOwn';
export * from './hourFloor';
export * from './isEmpty';
export * from './latLong';
export * from './limitedArray';
export * from './maybePluralize';
export * from './once';
export * from './partOfDay';

View File

@ -0,0 +1,68 @@
import { limitedArray } from './limitedArray';
test('should initialize an empty array', function () {
let lArray = new limitedArray();
expect(lArray.length()).toEqual(0);
});
test('Add an item to the array', function () {
let lArray = new limitedArray();
lArray.push('bob');
expect(lArray.length()).toEqual(1);
});
test('Add items to the array', function () {
let lArray = new limitedArray();
lArray.add([1, 2, 3, 4, 5]);
expect(lArray.length()).toEqual(5);
});
test('Add too many items', function () {
let lArray = new limitedArray(5);
lArray.add([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]);
expect(lArray.length()).toEqual(5);
});
test('Change limit', function () {
let lArray = new limitedArray();
lArray.add([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]);
lArray.limit(5);
expect(lArray.length()).toEqual(5);
});
test('Get items', function () {
let lArray = new limitedArray();
lArray.push('bob');
expect(lArray.get()).toEqual(['bob']);
});
test('Add too many items and get the results', function () {
let lArray = new limitedArray(5);
lArray.add([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]);
expect(lArray.get()).toEqual([6, 7, 8, 9, 10]);
});
test('Add one more', function () {
let lArray = new limitedArray(5);
lArray.add([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]);
lArray.push(11);
expect(lArray.get()).toEqual([7, 8, 9, 10, 11]);
});
/*test('Push many', function () {
let lArray = new limitedArray(5);
lArray.push(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
expect(lArray.get()).toEqual([6, 7, 8, 9, 10]);
});*/

67
ts-src/limitedArray.ts Normal file
View File

@ -0,0 +1,67 @@
export class limitedArray {
_array: any[];
_limit: number;
/**
* Used to construct the LimitedArray
* Defaults to 100 when no size is passed in
* @param size
*/
constructor(size = 100) {
this._array = [];
this._limit = size;
}
/**
* Add items to the end of an array
* @param item
*/
push(item: any): void {
this._array.push(item);
if (this._array.length > this._limit) this._array.shift();
}
/**
* Return the items within the array
* @returns {[]}
*/
get(): any[] {
return this._array;
}
/**
* Limits the size of the array
* @param size
*/
limit(size: number): void {
this._limit = size;
if (this._array.length > this._limit) this._array = this._array.slice(this._array.length - this._limit);
}
/**
* Returns the length of the array
* @returns {number}
*/
length(): number {
return this._array.length;
}
/**
* Bulk add an array to the array
* @param items
*/
add(items: any[]): void {
this._array = this._array.concat(items);
if (this._array.length > this._limit) this._array = this._array.slice(this._array.length - this._limit);
}
/**
* Remove an item from the beginning of an array
* @returns {*}
*/
shift(): any {
return this._array.shift();
}
}