refactor: refine priority queue bucket size validation
[poolifier.git] / tests / fixed-priority-queue.test.mjs
index 4821d387c819e577e6994cd296a24b9110aa039f..ddf002f0b2fcecd4091ed51a3ece546b347876be 100644 (file)
@@ -5,10 +5,10 @@ import {
   FixedPriorityQueue
 } from '../lib/fixed-priority-queue.cjs'
 
-describe.skip('Fixed Priority queue test suite', () => {
+describe('Fixed priority queue test suite', () => {
   it('Verify constructor() behavior', () => {
     expect(() => new FixedPriorityQueue('')).toThrow(
-      new TypeError('Invalid fixed priority queue size:  is not an integer')
+      new TypeError("Invalid fixed priority queue size: '' is not an integer")
     )
     expect(() => new FixedPriorityQueue(-1)).toThrow(
       new RangeError('Invalid fixed priority queue size: -1 < 0')
@@ -18,17 +18,18 @@ describe.skip('Fixed Priority queue test suite', () => {
     expect(fixedPriorityQueue.size).toBe(0)
     expect(fixedPriorityQueue.maxSize).toBe(0)
     expect(fixedPriorityQueue.nodeArray).toBeInstanceOf(Array)
-    expect(fixedPriorityQueue.nodeArray.length).toBe(defaultQueueSize)
+    expect(fixedPriorityQueue.capacity).toBe(defaultQueueSize)
     fixedPriorityQueue = new FixedPriorityQueue(2)
     expect(fixedPriorityQueue.start).toBe(0)
     expect(fixedPriorityQueue.size).toBe(0)
     expect(fixedPriorityQueue.maxSize).toBe(0)
     expect(fixedPriorityQueue.nodeArray).toBeInstanceOf(Array)
-    expect(fixedPriorityQueue.nodeArray.length).toBe(2)
+    expect(fixedPriorityQueue.capacity).toBe(2)
   })
 
   it('Verify enqueue() behavior', () => {
-    const fixedPriorityQueue = new FixedPriorityQueue()
+    const queueSize = 5
+    const fixedPriorityQueue = new FixedPriorityQueue(queueSize)
     let rtSize = fixedPriorityQueue.enqueue(1)
     expect(fixedPriorityQueue.start).toBe(0)
     expect(fixedPriorityQueue.size).toBe(1)
@@ -37,6 +38,7 @@ describe.skip('Fixed Priority queue test suite', () => {
     expect(fixedPriorityQueue.nodeArray).toMatchObject([
       { data: 1, priority: 0 }
     ])
+    expect(fixedPriorityQueue.capacity).toBe(queueSize)
     rtSize = fixedPriorityQueue.enqueue(2)
     expect(fixedPriorityQueue.start).toBe(0)
     expect(fixedPriorityQueue.size).toBe(2)
@@ -46,6 +48,7 @@ describe.skip('Fixed Priority queue test suite', () => {
       { data: 1, priority: 0 },
       { data: 2, priority: 0 }
     ])
+    expect(fixedPriorityQueue.capacity).toBe(queueSize)
     rtSize = fixedPriorityQueue.enqueue(3)
     expect(fixedPriorityQueue.start).toBe(0)
     expect(fixedPriorityQueue.size).toBe(3)
@@ -56,6 +59,7 @@ describe.skip('Fixed Priority queue test suite', () => {
       { data: 2, priority: 0 },
       { data: 3, priority: 0 }
     ])
+    expect(fixedPriorityQueue.capacity).toBe(queueSize)
     rtSize = fixedPriorityQueue.enqueue(3, -1)
     expect(fixedPriorityQueue.start).toBe(0)
     expect(fixedPriorityQueue.size).toBe(4)
@@ -67,6 +71,7 @@ describe.skip('Fixed Priority queue test suite', () => {
       { data: 2, priority: 0 },
       { data: 3, priority: 0 }
     ])
+    expect(fixedPriorityQueue.capacity).toBe(queueSize)
     rtSize = fixedPriorityQueue.enqueue(1, 1)
     expect(fixedPriorityQueue.start).toBe(0)
     expect(fixedPriorityQueue.size).toBe(5)
@@ -79,16 +84,22 @@ describe.skip('Fixed Priority queue test suite', () => {
       { data: 3, priority: 0 },
       { data: 1, priority: 1 }
     ])
+    expect(fixedPriorityQueue.capacity).toBe(queueSize)
+    expect(() => fixedPriorityQueue.enqueue(4)).toThrow(
+      new Error('Priority queue is full')
+    )
   })
 
   it('Verify dequeue() behavior', () => {
-    const fixedPriorityQueue = new FixedPriorityQueue()
+    const queueSize = 5
+    const fixedPriorityQueue = new FixedPriorityQueue(queueSize)
     fixedPriorityQueue.enqueue(1)
     fixedPriorityQueue.enqueue(2, -1)
     fixedPriorityQueue.enqueue(3)
     expect(fixedPriorityQueue.start).toBe(0)
     expect(fixedPriorityQueue.size).toBe(3)
     expect(fixedPriorityQueue.maxSize).toBe(3)
+    expect(fixedPriorityQueue.capacity).toBe(queueSize)
     let rtItem = fixedPriorityQueue.dequeue()
     expect(fixedPriorityQueue.start).toBe(1)
     expect(fixedPriorityQueue.size).toBe(2)
@@ -99,6 +110,7 @@ describe.skip('Fixed Priority queue test suite', () => {
       { data: 1, priority: 0 },
       { data: 3, priority: 0 }
     ])
+    expect(fixedPriorityQueue.capacity).toBe(queueSize)
     rtItem = fixedPriorityQueue.dequeue()
     expect(fixedPriorityQueue.start).toBe(2)
     expect(fixedPriorityQueue.size).toBe(1)
@@ -109,6 +121,7 @@ describe.skip('Fixed Priority queue test suite', () => {
       { data: 1, priority: 0 },
       { data: 3, priority: 0 }
     ])
+    expect(fixedPriorityQueue.capacity).toBe(queueSize)
     rtItem = fixedPriorityQueue.dequeue()
     expect(fixedPriorityQueue.start).toBe(3)
     expect(fixedPriorityQueue.size).toBe(0)
@@ -119,7 +132,18 @@ describe.skip('Fixed Priority queue test suite', () => {
       { data: 1, priority: 0 },
       { data: 3, priority: 0 }
     ])
-    expect(fixedPriorityQueue.dequeue()).toBe(undefined)
+    expect(fixedPriorityQueue.capacity).toBe(queueSize)
+    rtItem = fixedPriorityQueue.dequeue()
+    expect(fixedPriorityQueue.start).toBe(3)
+    expect(fixedPriorityQueue.size).toBe(0)
+    expect(fixedPriorityQueue.maxSize).toBe(3)
+    expect(rtItem).toBe(undefined)
+    expect(fixedPriorityQueue.nodeArray).toMatchObject([
+      { data: 2, priority: -1 },
+      { data: 1, priority: 0 },
+      { data: 3, priority: 0 }
+    ])
+    expect(fixedPriorityQueue.capacity).toBe(queueSize)
   })
 
   it('Verify iterator behavior', () => {
@@ -140,6 +164,26 @@ describe.skip('Fixed Priority queue test suite', () => {
     }
   })
 
+  it('Verify empty() behavior', () => {
+    const fixedPriorityQueue = new FixedPriorityQueue()
+    expect(fixedPriorityQueue.empty()).toBe(true)
+    fixedPriorityQueue.enqueue(1)
+    expect(fixedPriorityQueue.empty()).toBe(false)
+    fixedPriorityQueue.dequeue()
+    expect(fixedPriorityQueue.empty()).toBe(true)
+  })
+
+  it('Verify full() behavior', () => {
+    const fixedPriorityQueue = new FixedPriorityQueue(2)
+    expect(fixedPriorityQueue.full()).toBe(false)
+    fixedPriorityQueue.enqueue(1)
+    expect(fixedPriorityQueue.full()).toBe(false)
+    fixedPriorityQueue.enqueue(2)
+    expect(fixedPriorityQueue.full()).toBe(true)
+    fixedPriorityQueue.dequeue()
+    expect(fixedPriorityQueue.full()).toBe(false)
+  })
+
   it('Verify clear() behavior', () => {
     const fixedPriorityQueue = new FixedPriorityQueue()
     fixedPriorityQueue.start = 1