X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=tests%2Fpriority-queue.test.mjs;h=624d577a4c6d0466a1fe18272d3bb4310c7d0985;hb=9373412afbf68f74e3c3ea30abe5753d85a5f7e7;hp=5014b3a4af02f4e964b7ec38815506ee21beeb09;hpb=95d1a734d57942c892202df7c0fcaf2fb5ab89ab;p=poolifier.git diff --git a/tests/priority-queue.test.mjs b/tests/priority-queue.test.mjs index 5014b3a4..624d577a 100644 --- a/tests/priority-queue.test.mjs +++ b/tests/priority-queue.test.mjs @@ -15,11 +15,13 @@ describe('Priority queue test suite', () => { ) let priorityQueue = new PriorityQueue() expect(priorityQueue.k).toBe(Infinity) + expect(priorityQueue.buckets).toBe(1) expect(priorityQueue.size).toBe(0) expect(priorityQueue.maxSize).toBe(0) expect(priorityQueue.nodeArray).toStrictEqual([]) priorityQueue = new PriorityQueue(2) expect(priorityQueue.k).toBe(2) + expect(priorityQueue.buckets).toBe(0) expect(priorityQueue.size).toBe(0) expect(priorityQueue.maxSize).toBe(0) expect(priorityQueue.nodeArray).toStrictEqual([]) @@ -28,11 +30,13 @@ describe('Priority queue test suite', () => { it('Verify default k enqueue() behavior', () => { const priorityQueue = new PriorityQueue() let rtSize = priorityQueue.enqueue(1) + expect(priorityQueue.buckets).toBe(1) expect(priorityQueue.size).toBe(1) expect(priorityQueue.maxSize).toBe(1) expect(rtSize).toBe(priorityQueue.size) expect(priorityQueue.nodeArray).toStrictEqual([{ data: 1, priority: 0 }]) rtSize = priorityQueue.enqueue(2) + expect(priorityQueue.buckets).toBe(1) expect(priorityQueue.size).toBe(2) expect(priorityQueue.maxSize).toBe(2) expect(rtSize).toBe(priorityQueue.size) @@ -41,6 +45,7 @@ describe('Priority queue test suite', () => { { data: 2, priority: 0 } ]) rtSize = priorityQueue.enqueue(3) + expect(priorityQueue.buckets).toBe(1) expect(priorityQueue.size).toBe(3) expect(priorityQueue.maxSize).toBe(3) expect(rtSize).toBe(priorityQueue.size) @@ -50,6 +55,7 @@ describe('Priority queue test suite', () => { { data: 3, priority: 0 } ]) rtSize = priorityQueue.enqueue(3, -1) + expect(priorityQueue.buckets).toBe(1) expect(priorityQueue.size).toBe(4) expect(priorityQueue.maxSize).toBe(4) expect(rtSize).toBe(priorityQueue.size) @@ -60,6 +66,7 @@ describe('Priority queue test suite', () => { { data: 3, priority: 0 } ]) rtSize = priorityQueue.enqueue(1, 1) + expect(priorityQueue.buckets).toBe(1) expect(priorityQueue.size).toBe(5) expect(priorityQueue.maxSize).toBe(5) expect(rtSize).toBe(priorityQueue.size) @@ -75,11 +82,13 @@ describe('Priority queue test suite', () => { it('Verify k=2 enqueue() behavior', () => { const priorityQueue = new PriorityQueue(2) let rtSize = priorityQueue.enqueue(1) + expect(priorityQueue.buckets).toBe(0) expect(priorityQueue.size).toBe(1) expect(priorityQueue.maxSize).toBe(1) expect(rtSize).toBe(priorityQueue.size) expect(priorityQueue.nodeArray).toStrictEqual([{ data: 1, priority: 0 }]) rtSize = priorityQueue.enqueue(2) + expect(priorityQueue.buckets).toBe(1) expect(priorityQueue.size).toBe(2) expect(priorityQueue.maxSize).toBe(2) expect(rtSize).toBe(priorityQueue.size) @@ -88,6 +97,7 @@ describe('Priority queue test suite', () => { { data: 2, priority: 0 } ]) rtSize = priorityQueue.enqueue(3) + expect(priorityQueue.buckets).toBe(1) expect(priorityQueue.size).toBe(3) expect(priorityQueue.maxSize).toBe(3) expect(rtSize).toBe(priorityQueue.size) @@ -97,6 +107,7 @@ describe('Priority queue test suite', () => { { data: 3, priority: 0 } ]) rtSize = priorityQueue.enqueue(3, -1) + expect(priorityQueue.buckets).toBe(2) expect(priorityQueue.size).toBe(4) expect(priorityQueue.maxSize).toBe(4) expect(rtSize).toBe(priorityQueue.size) @@ -107,6 +118,7 @@ describe('Priority queue test suite', () => { { data: 3, priority: 0 } ]) rtSize = priorityQueue.enqueue(1, 1) + expect(priorityQueue.buckets).toBe(2) expect(priorityQueue.size).toBe(5) expect(priorityQueue.maxSize).toBe(5) expect(rtSize).toBe(priorityQueue.size) @@ -117,7 +129,8 @@ describe('Priority queue test suite', () => { { data: 3, priority: 0 }, { data: 1, priority: 1 } ]) - rtSize = priorityQueue.enqueue(2, -2) + rtSize = priorityQueue.enqueue(3, -2) + expect(priorityQueue.buckets).toBe(3) expect(priorityQueue.size).toBe(6) expect(priorityQueue.maxSize).toBe(6) expect(rtSize).toBe(priorityQueue.size) @@ -126,17 +139,21 @@ describe('Priority queue test suite', () => { { data: 2, priority: 0 }, { data: 3, priority: -1 }, { data: 3, priority: 0 }, - { data: 2, priority: -2 }, + { data: 3, priority: -2 }, { data: 1, priority: 1 } ]) }) - it('Verify dequeue() behavior', () => { + it('Verify default k dequeue() behavior', () => { const priorityQueue = new PriorityQueue() priorityQueue.enqueue(1) priorityQueue.enqueue(2, -1) priorityQueue.enqueue(3) + expect(priorityQueue.buckets).toBe(1) + expect(priorityQueue.size).toBe(3) + expect(priorityQueue.maxSize).toBe(3) let rtItem = priorityQueue.dequeue() + expect(priorityQueue.buckets).toBe(1) expect(priorityQueue.size).toBe(2) expect(priorityQueue.maxSize).toBe(3) expect(rtItem).toBe(2) @@ -145,17 +162,86 @@ describe('Priority queue test suite', () => { { data: 3, priority: 0 } ]) rtItem = priorityQueue.dequeue() + expect(priorityQueue.buckets).toBe(1) expect(priorityQueue.size).toBe(1) expect(priorityQueue.maxSize).toBe(3) expect(rtItem).toBe(1) expect(priorityQueue.nodeArray).toStrictEqual([{ data: 3, priority: 0 }]) rtItem = priorityQueue.dequeue() + expect(priorityQueue.buckets).toBe(1) expect(priorityQueue.size).toBe(0) expect(priorityQueue.maxSize).toBe(3) expect(rtItem).toBe(3) expect(priorityQueue.nodeArray).toStrictEqual([]) }) + it('Verify k=2 dequeue() behavior', () => { + const priorityQueue = new PriorityQueue(2) + priorityQueue.enqueue(1) + priorityQueue.enqueue(2) + priorityQueue.enqueue(3) + priorityQueue.enqueue(3, -1) + priorityQueue.enqueue(1, 1) + priorityQueue.enqueue(3, -2) + expect(priorityQueue.buckets).toBe(3) + expect(priorityQueue.size).toBe(6) + expect(priorityQueue.maxSize).toBe(6) + let rtItem = priorityQueue.dequeue(3) + expect(priorityQueue.buckets).toBe(2) + expect(priorityQueue.size).toBe(5) + expect(priorityQueue.maxSize).toBe(6) + expect(rtItem).toBe(3) + expect(priorityQueue.nodeArray).toStrictEqual([ + { data: 1, priority: 0 }, + { data: 2, priority: 0 }, + { data: 3, priority: -1 }, + { data: 3, priority: 0 }, + { data: 1, priority: 1 } + ]) + rtItem = priorityQueue.dequeue() + expect(priorityQueue.buckets).toBe(2) + expect(priorityQueue.size).toBe(4) + expect(priorityQueue.maxSize).toBe(6) + expect(rtItem).toBe(1) + expect(priorityQueue.nodeArray).toStrictEqual([ + { data: 2, priority: 0 }, + { data: 3, priority: -1 }, + { data: 3, priority: 0 }, + { data: 1, priority: 1 } + ]) + rtItem = priorityQueue.dequeue(2) + expect(priorityQueue.buckets).toBe(1) + expect(priorityQueue.size).toBe(3) + expect(priorityQueue.maxSize).toBe(6) + expect(rtItem).toBe(3) + expect(priorityQueue.nodeArray).toStrictEqual([ + { data: 2, priority: 0 }, + { data: 3, priority: -1 }, + { data: 1, priority: 1 } + ]) + rtItem = priorityQueue.dequeue(2) + expect(priorityQueue.buckets).toBe(1) + expect(priorityQueue.size).toBe(2) + expect(priorityQueue.maxSize).toBe(6) + expect(rtItem).toBe(1) + expect(priorityQueue.nodeArray).toStrictEqual([ + { data: 2, priority: 0 }, + { data: 3, priority: -1 } + ]) + rtItem = priorityQueue.dequeue(2) + expect(priorityQueue.buckets).toBe(0) + expect(priorityQueue.size).toBe(1) + expect(priorityQueue.maxSize).toBe(6) + expect(rtItem).toBe(2) + expect(priorityQueue.nodeArray).toStrictEqual([{ data: 3, priority: -1 }]) + rtItem = priorityQueue.dequeue() + expect(priorityQueue.buckets).toBe(0) + expect(priorityQueue.size).toBe(0) + expect(priorityQueue.maxSize).toBe(6) + expect(rtItem).toBe(3) + expect(priorityQueue.nodeArray).toStrictEqual([]) + }) + it('Verify peekFirst() behavior', () => { const priorityQueue = new PriorityQueue() priorityQueue.enqueue(1) @@ -193,6 +279,7 @@ describe('Priority queue test suite', () => { priorityQueue.enqueue(1) priorityQueue.enqueue(2) priorityQueue.enqueue(3) + expect(priorityQueue.buckets).toBe(1) expect(priorityQueue.size).toBe(3) expect(priorityQueue.maxSize).toBe(3) expect(priorityQueue.nodeArray).toStrictEqual([ @@ -201,6 +288,7 @@ describe('Priority queue test suite', () => { { data: 3, priority: 0 } ]) priorityQueue.clear() + expect(priorityQueue.buckets).toBe(1) expect(priorityQueue.size).toBe(0) expect(priorityQueue.maxSize).toBe(0) expect(priorityQueue.nodeArray).toStrictEqual([])