triple-queue
Advanced tools
| # 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}]); |
+5
-2
| { | ||
| "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", |
+3
-1
@@ -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[]; |
+17
-5
@@ -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; |
+93
-3
@@ -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(); | ||
| }); | ||
| }); |
No README
QualityPackage does not have a README. This may indicate a failed publish or a low quality package.
Found 1 instance in 1 package
20486
17.12%12
9.09%506
18.5%1
-50%4
Infinity%