UNPKG

event-emitters

Version:
129 lines 4.64 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var Queue_1 = require("./Queue"); describe('Queue', function () { it('can queue and dequeue 3 items', function () { var queue = new Queue_1.Queue(); queue.enqueue(1); queue.enqueue(2); queue.enqueue(3); expect(queue.length).toEqual(3); expect(queue.dequeue()).toEqual(1); expect(queue.length).toEqual(2); expect(queue.dequeue()).toEqual(2); expect(queue.dequeue()).toEqual(3); expect(queue.length).toEqual(0); }); it('moves elements before head to end after capacity increase when head is in first half', function () { // set up 45123 var queue = new Queue_1.Queue(5); queue.enqueue(98); queue.enqueue(99); queue.enqueue(1); queue.enqueue(2); queue.enqueue(3); expect(queue.dequeue()).toEqual(98); expect(queue.dequeue()).toEqual(99); // xx123 queue.enqueue(4); // 4x123 queue.enqueue(5); // 45123 expect(queue.length).toEqual(5); // exceed current capacity queue.enqueue(6); // ee123456ee // then fill up to the new capacity queue.enqueue(7); queue.enqueue(8); queue.enqueue(9); queue.enqueue(10); // 9a12345678 expect(queue.length).toEqual(10); // ensure everything is in order for (var i = 1; i <= 10; ++i) { expect(queue.dequeue()).toEqual(i); } expect(queue.length).toEqual(0); }); it('moves elements after tail to end after capacity increase when head is in last half', function () { // set up 34512 var queue = new Queue_1.Queue(5); queue.enqueue(97); queue.enqueue(98); queue.enqueue(99); queue.enqueue(1); queue.enqueue(2); expect(queue.dequeue()).toEqual(97); expect(queue.dequeue()).toEqual(98); expect(queue.dequeue()).toEqual(99); // xxx12 queue.enqueue(3); // 3xx12 queue.enqueue(4); // 34x12 queue.enqueue(5); // 34512 expect(queue.length).toEqual(5); // exceed current capacity queue.enqueue(6); // 3456eeee12 // then fill up to the new capacity queue.enqueue(7); queue.enqueue(8); queue.enqueue(9); queue.enqueue(10); // 3456789012 expect(queue.length).toEqual(10); // ensure everything is in order for (var i = 1; i <= 10; ++i) { expect(queue.dequeue()).toEqual(i); } expect(queue.length).toEqual(0); }); it('throws an error when trying to dequeue nonexistent item', function () { var queue = new Queue_1.Queue(); queue.enqueue(1); expect(queue.dequeue()).toEqual(1); expect(function () { queue.dequeue(); }).toThrowError(); }); it('can queue past initial capacity of circular buffer', function () { var queue = new Queue_1.Queue(); var moreThanCapacity = 17; for (var i = 0; i < moreThanCapacity; ++i) { queue.enqueue(i); } expect(queue.length).toEqual(moreThanCapacity); for (var i = 0; i < moreThanCapacity; ++i) { expect(queue.dequeue()).toEqual(i); } expect(queue.length).toEqual(0); }); it('supports interleaved queues and dequeues', function () { var queue = new Queue_1.Queue(); queue.enqueue(1); queue.enqueue(2); expect(queue.dequeue()).toEqual(1); queue.enqueue(3); queue.enqueue(4); expect(queue.dequeue()).toEqual(2); queue.enqueue(5); queue.enqueue(6); expect(queue.dequeue()).toEqual(3); expect(queue.dequeue()).toEqual(4); expect(queue.dequeue()).toEqual(5); expect(queue.dequeue()).toEqual(6); }); it('supports a large number of interleaved queues and dequeues', function () { var initialSize = 4; var queue = new Queue_1.Queue(); for (var i = 0; i < initialSize; ++i) { queue.enqueue(i); } var nextRead = 0; var nextWrite = initialSize; for (var i = 0; i < 10000; ++i) { if (nextRead === nextWrite || Math.random() < 0.5) { queue.enqueue(nextWrite++); } else { expect(queue.dequeue()).toEqual(nextRead++); } } for (; nextRead < nextWrite; ++nextRead) { expect(queue.dequeue()).toEqual(nextRead); } }); }); //# sourceMappingURL=Queue.spec.js.map