🚀 Big News:Socket Has Acquired Secure Annex.Learn More
Socket
Book a DemoSign in
Socket

triple-queue

Package Overview
Dependencies
Maintainers
1
Versions
2
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

triple-queue - npm Package Compare versions

Comparing version
1.0.0
to
1.1.1
+3
README.md
# prev-curr-next-queue
It`s simple triple queue for data like array.
+1
-1

@@ -1,1 +0,1 @@

module.exports=function(t){function e(u){if(i[u])return i[u].exports;var n=i[u]={exports:{},id:u,loaded:!1};return t[u].call(n.exports,n,n.exports,e),n.loaded=!0,n.exports}var i={};return e.m=t,e.c=i,e.p="",e(0)}([function(t,e){"use strict";var i=function(){function t(){this.range={from:1,to:null},this.queue={prev:[],actual:[],next:[]}}return t.prototype.setSize=function(t){this.size=t},t.prototype.getSize=function(){return this.size},t.prototype.setCount=function(t){this.count=t},t.prototype.getCount=function(){return this.count},t.prototype.getActual=function(){return this.queue.actual},t.prototype.getPrev=function(){return this.queue.prev},t.prototype.getNext=function(){return this.queue.next},t.prototype.getAvailability=function(){return this.isEnough()?0:this.count-(this.range.to+this.getNext().length)},t.prototype.isEnough=function(){return this.range.to+this.getNext().length>=this.count},t.prototype.moveForward=function(){if(!this.queue.next)return null;var t=this.queue.prev;return this.shiftQueue(),t},t.prototype.moveBack=function(){if(!this.queue.prev)return null;var t=this.queue.next;return this.shiftQueue([],!0),t},t.prototype.setPrevPiece=function(t){this.pieceIsValid(t),this.isEmpty(this.queue.prev)&&(this.queue.prev=t)},t.prototype.setPiece=function(t){this.pieceIsValid(t),this.isEmpty(this.queue.actual)?(this.queue.actual=t,this.setRange(t.length)):this.isEmpty(this.queue.next)?this.queue.next=t:this.shiftQueue(t)},t.prototype.getActualRange=function(){return this.range},t.prototype.pieceIsValid=function(t){if(!this.size||this.size<=0)throw Error("don`t exist size. Please set size for your queue.");if(this.isEmpty(t))throw Error("empty piece. Please get not empty data piece.");if(t.length>this.size)throw Error("length your piece more than size queue.")},t.prototype.shiftQueue=function(t,e){if(void 0===t&&(t=[]),void 0===e&&(e=!1),e){var i=this.queue.prev,u=this.queue.actual;this.queue.prev=t,this.queue.actual=i,this.queue.next=u,this.setRange(u.length,!0)}else{var i=this.queue.next,n=this.queue.actual;this.queue.prev=n,this.queue.actual=i,this.queue.next=t,this.setRange(i.length)}},t.prototype.setRange=function(t,e){void 0===e&&(e=!1),this.range.to?e?(this.range.to-=t,this.range.from-=this.range.to):(this.range.from=this.range.to+1,this.range.to+=t):this.range.to=t},t.prototype.isEmpty=function(t){return t?!t.length:!0},t}();Object.defineProperty(e,"__esModule",{value:!0}),e["default"]=i}]);
module.exports=function(t){function e(u){if(i[u])return i[u].exports;var r=i[u]={exports:{},id:u,loaded:!1};return t[u].call(r.exports,r,r.exports,e),r.loaded=!0,r.exports}var i={};return e.m=t,e.c=i,e.p="",e(0)}([function(t,e){"use strict";var i=function(){function t(){this.range={from:1,to:null},this.queue={prev:[],actual:[],next:[]}}return t.prototype.setSize=function(t){this.size=t},t.prototype.getSize=function(){return this.size},t.prototype.setCount=function(t){this.count=t},t.prototype.getCount=function(){return this.count},t.prototype.getActual=function(){return this.queue.actual},t.prototype.getPrev=function(){return this.queue.prev},t.prototype.getNext=function(){return this.queue.next},t.prototype.getAvailability=function(){return this.isEnd()?0:this.count-(this.range.to+this.getNext().length)},t.prototype.isEnd=function(){return this.range.to+this.getNext().length>=this.count},t.prototype.isStart=function(){return this.range.from-this.getPrev().length===1},t.prototype.moveForward=function(){if(!this.queue.next)return null;var t=this.queue.prev;return this.shiftQueue(),t},t.prototype.moveBack=function(){if(!this.queue.prev)return null;var t=this.queue.next;return this.shiftQueue([],!0),t},t.prototype.setPrevPiece=function(t){if(this.pieceIsValid(t),this.isStart())throw Error("queue already in position start");this.isEmpty(this.queue.prev)&&(this.queue.prev=t)},t.prototype.setPiece=function(t){this.pieceIsValid(t),this.isEmpty(this.queue.actual)?(this.queue.actual=t,this.setRange(t.length)):this.isEmpty(this.queue.next)?this.queue.next=t:this.shiftQueue(t)},t.prototype.getActualRange=function(){return this.range},t.prototype.setActualRange=function(t){this.range=t},t.prototype.pieceIsValid=function(t){if(!this.size||this.size<=0)throw Error("don`t exist size. Please set size for your queue.");if(this.isEmpty(t))throw Error("empty piece. Please get not empty data piece.");if(t.length>this.size)throw Error("length your piece more than size queue.")},t.prototype.shiftQueue=function(t,e){if(void 0===t&&(t=[]),void 0===e&&(e=!1),e){var i=this.queue.prev,u=this.queue.actual;this.queue.prev=t,this.queue.actual=i,this.queue.next=u,this.setRange(u.length,!0,i.length)}else{var i=this.queue.next,r=this.queue.actual;this.queue.prev=r,this.queue.actual=i,this.queue.next=t,this.setRange(i.length)}},t.prototype.setRange=function(t,e,i){void 0===e&&(e=!1),this.range.to?e?(this.range.to-=t,this.range.from-=i):(this.range.from=this.range.to+1,this.range.to+=t):this.range.to=t},t.prototype.isEmpty=function(t){return t?!t.length:!0},t}();Object.defineProperty(e,"__esModule",{value:!0}),e["default"]=i}]);
{
"name": "triple-queue",
"version": "1.0.0",
"version": "1.1.1",
"description": "simple triple queue",

@@ -11,3 +11,6 @@ "main": "dist/queue.js",

},
"keywords": ["queue", "stack"],
"keywords": [
"queue",
"stack"
],
"author": "Andreev Vladimir",

@@ -14,0 +17,0 @@ "license": "MIT",

@@ -9,3 +9,4 @@ export interface IQueue<T> {

getNext(): T[];
isEnough(): boolean;
isEnd(): boolean;
isStart(): boolean;
getAvailability(): number;

@@ -15,2 +16,3 @@ getActualRange(): IRangeObject;

setPrevPiece(piece: T[]): void;
setActualRange(range: IRangeObject): void;
moveForward(): T[];

@@ -17,0 +19,0 @@ moveBack(): T[];

@@ -35,9 +35,13 @@ import {IQueue, IQueueObject, IRangeObject} from './IQueue';

getAvailability(): number{
return this.isEnough() ? 0 : (this.count - (this.range.to + this.getNext().length));
return this.isEnd() ? 0 : (this.count - (this.range.to + this.getNext().length));
}
isEnough(): boolean {
isEnd(): boolean {
return (this.range.to + this.getNext().length) >= this.count ? true : false;
}
isStart(): boolean {
return (this.range.from - this.getPrev().length) === 1 ? true : false;
}
moveForward(): T[] {

@@ -65,2 +69,6 @@ if(!this.queue.next) return null;

this.pieceIsValid(piece);
if(this.isStart()){
throw Error('queue already in position start');
}

@@ -90,2 +98,6 @@ if(this.isEmpty(this.queue.prev)){

setActualRange(range: IRangeObject): void {
this.range = range;
}
private pieceIsValid(piece: T[]): void {

@@ -123,7 +135,7 @@ if(!this.size || this.size <= 0){

this.setRange(new_next.length, true);
this.setRange(new_next.length, true, new_actual.length);
}
}
private setRange(len: number, back: boolean = false): void {
private setRange(len: number, back: boolean = false, prev_len?: number): void {
if(!this.range.to) {

@@ -134,3 +146,3 @@ this.range.to = len;

this.range.to -= len;
this.range.from -= this.range.to;
this.range.from -= prev_len;
} else {

@@ -137,0 +149,0 @@ this.range.from = this.range.to + 1;

@@ -153,2 +153,21 @@ import Queue from '../src/Queue.ts';

it("Есть возможность явно указать первые значения для диапозонов, продолжит считать", () => {
var piece_1 = [1, 2, 3, 4, 5],
piece_2 = [10, 20, 30],
piece_3 = [10, 20, 30, 40],
piece_4 = [10, 20, 30, 40, 8],
from = 11,
to = 15,
size = 5;
queue.setSize(size);
queue.setActualRange({from, to});
expect(queue.getActualRange()).toEqual({from, to});
queue.setPiece(piece_1);
expect(queue.getActualRange()).toEqual({from: from + piece_1.length, to: to + piece_1.length});
});
it("Если установить общий размер count, и записать меньше объектов, должен показывать что в очереди есть место", () => {

@@ -166,4 +185,6 @@ var piece_1 = [1, 2, 3, 4, 5],

queue.setPiece(piece_3);
queue.setPiece(piece_2);
expect(queue.isEnough()).toBeFalsy();
expect(queue.isEnd()).toBeFalsy();
expect(queue.isStart()).toBeFalsy();
});

@@ -183,5 +204,56 @@

expect(queue.isEnough()).toBeTruthy();
expect(queue.isEnd()).toBeTruthy();
});
it("Если вернулись обратно в начало очереди, isStart вернет true", () => {
var piece_1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
piece_2 = [10, 20, 30, 40, 50],
count = 15,
size = 10;
queue.setSize(size);
queue.setCount(count);
queue.setPiece(piece_1);
queue.setPiece(piece_2);
expect(queue.isStart()).toBeTruthy();
});
it("Общий тест для флагов isStart и isEnd", () => {
var piece_1 = [1, 2, 3, 4, 5],
piece_2 = [10, 20, 30],
piece_3 = [10, 13, 30, 89, 50],
piece_4 = [10, 20, 48, 50],
piece_5 = [10, 20, 5],
count = 20,
size = 5;
queue.setSize(size);
queue.setCount(count);
queue.setPiece(piece_1);
queue.setPiece(piece_2);
expect(queue.isStart()).toBeTruthy();
expect(queue.isEnd()).toBeFalsy();
queue.setPiece(piece_3);
queue.setPiece(piece_4);
queue.setPiece(piece_5);
expect(queue.isStart()).toBeFalsy();
expect(queue.isEnd()).toBeTruthy();
queue.moveBack();
queue.setPrevPiece(piece_2);
expect(queue.isStart()).toBeFalsy();
expect(queue.isEnd()).toBeFalsy();
queue.moveBack();
queue.setPrevPiece(piece_1);
expect(queue.isStart()).toBeTruthy();
expect(queue.isEnd()).toBeFalsy();
});
it("Если установить общий размер count, вернет число доступных мест в очереди", () => {

@@ -247,3 +319,3 @@ var piece_1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],

queue.setPiece(piece_3);
expect(queue.moveBack()).toEqual(piece_3);

@@ -299,2 +371,20 @@ expect(queue.getPrev()).toEqual([]);

});
it("Если prev пустой, но мы уже на старте очереди, вылетает ошибка", () => {
var piece_1 = [1, 2, 3, 4, 5, 6, 7, 8],
piece_2 = [10, 20],
piece_3 = [10, 20, 30, 40],
piece_after = [1111],
size = 10;
queue.setSize(size);
queue.setPiece(piece_1);
queue.setPiece(piece_2);
queue.setPiece(piece_3);
queue.moveBack();
expect(() => queue.setPrevPiece(piece_after)).toThrowError();
});
});