X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=tests%2Fpriority-queue.test.mjs;h=d65d6f1656fffb8229d158ca6577ef77208c3471;hb=c03a84428da3103ace85b5b7adc23b8217444333;hp=ddc8c09d6bdd0422428fe87317c381dd6b8b1fee;hpb=579aa5bd0da2971c57a8f26be4a425e78f5ad040;p=poolifier.git diff --git a/tests/priority-queue.test.mjs b/tests/priority-queue.test.mjs index ddc8c09d..d65d6f16 100644 --- a/tests/priority-queue.test.mjs +++ b/tests/priority-queue.test.mjs @@ -16,17 +16,19 @@ describe('Priority queue test suite', () => { expect(priorityQueue.buckets).toBe(0) expect(priorityQueue.size).toBe(0) expect(priorityQueue.maxSize).toBe(0) + expect(priorityQueue.enablePriority).toBe(false) expect(priorityQueue.head).toBeInstanceOf(FixedPriorityQueue) expect(priorityQueue.head.next).toBe(undefined) expect(priorityQueue.head.capacity).toBe(defaultBucketSize) expect(priorityQueue.tail).toBeInstanceOf(FixedPriorityQueue) expect(priorityQueue.tail).toStrictEqual(priorityQueue.head) const bucketSize = 2 - priorityQueue = new PriorityQueue(bucketSize) + priorityQueue = new PriorityQueue(bucketSize, true) expect(priorityQueue.bucketSize).toBe(bucketSize) expect(priorityQueue.buckets).toBe(0) expect(priorityQueue.size).toBe(0) expect(priorityQueue.maxSize).toBe(0) + expect(priorityQueue.enablePriority).toBe(true) expect(priorityQueue.head).toBeInstanceOf(FixedPriorityQueue) expect(priorityQueue.head.next).toBe(undefined) expect(priorityQueue.head.capacity).toBe(bucketSize) @@ -35,14 +37,14 @@ describe('Priority queue test suite', () => { }) it('Verify default bucket size enqueue() behavior', () => { - const priorityQueue = new PriorityQueue() + const priorityQueue = new PriorityQueue(defaultBucketSize, true) 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.head.nodeArray).toMatchObject([ - { data: 1, priority: 0 } + { data: 1, priority: 0 }, ]) expect(priorityQueue.head.next).toBe(undefined) expect(priorityQueue.tail).toStrictEqual(priorityQueue.head) @@ -53,7 +55,7 @@ describe('Priority queue test suite', () => { expect(rtSize).toBe(priorityQueue.size) expect(priorityQueue.head.nodeArray).toMatchObject([ { data: 1, priority: 0 }, - { data: 2, priority: 0 } + { data: 2, priority: 0 }, ]) expect(priorityQueue.head.next).toBe(undefined) expect(priorityQueue.tail).toStrictEqual(priorityQueue.head) @@ -65,7 +67,7 @@ describe('Priority queue test suite', () => { expect(priorityQueue.head.nodeArray).toMatchObject([ { data: 1, priority: 0 }, { data: 2, priority: 0 }, - { data: 3, priority: 0 } + { data: 3, priority: 0 }, ]) expect(priorityQueue.head.next).toBe(undefined) expect(priorityQueue.tail).toStrictEqual(priorityQueue.head) @@ -78,7 +80,7 @@ describe('Priority queue test suite', () => { { data: 3, priority: -1 }, { data: 1, priority: 0 }, { data: 2, priority: 0 }, - { data: 3, priority: 0 } + { data: 3, priority: 0 }, ]) expect(priorityQueue.head.next).toBe(undefined) expect(priorityQueue.tail).toStrictEqual(priorityQueue.head) @@ -92,21 +94,21 @@ describe('Priority queue test suite', () => { { data: 1, priority: 0 }, { data: 2, priority: 0 }, { data: 3, priority: 0 }, - { data: 1, priority: 1 } + { data: 1, priority: 1 }, ]) expect(priorityQueue.head.next).toBe(undefined) expect(priorityQueue.tail).toStrictEqual(priorityQueue.head) }) it('Verify bucketSize=2 enqueue() behavior', () => { - const priorityQueue = new PriorityQueue(2) + const priorityQueue = new PriorityQueue(2, true) 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.head.nodeArray).toMatchObject([ - { data: 1, priority: 0 } + { data: 1, priority: 0 }, ]) expect(priorityQueue.head.next).toBe(undefined) expect(priorityQueue.tail).toStrictEqual(priorityQueue.head) @@ -117,7 +119,7 @@ describe('Priority queue test suite', () => { expect(rtSize).toBe(priorityQueue.size) expect(priorityQueue.head.nodeArray).toMatchObject([ { data: 1, priority: 0 }, - { data: 2, priority: 0 } + { data: 2, priority: 0 }, ]) expect(priorityQueue.head.next).toBe(undefined) expect(priorityQueue.tail).toStrictEqual(priorityQueue.head) @@ -127,14 +129,15 @@ describe('Priority queue test suite', () => { expect(priorityQueue.maxSize).toBe(3) expect(rtSize).toBe(priorityQueue.size) expect(priorityQueue.head.nodeArray).toMatchObject([ - { data: 3, priority: 0 } + { data: 3, priority: 0 }, ]) expect(priorityQueue.head.next).toBe(undefined) expect(priorityQueue.tail.nodeArray).toMatchObject([ { data: 1, priority: 0 }, - { data: 2, priority: 0 } + { data: 2, priority: 0 }, ]) expect(priorityQueue.tail.next).toStrictEqual(priorityQueue.head) + expect(priorityQueue.tail).not.toStrictEqual(priorityQueue.head) rtSize = priorityQueue.enqueue(3, -1) expect(priorityQueue.buckets).toBe(2) expect(priorityQueue.size).toBe(4) @@ -142,32 +145,35 @@ describe('Priority queue test suite', () => { expect(rtSize).toBe(priorityQueue.size) expect(priorityQueue.head.nodeArray).toMatchObject([ { data: 3, priority: -1 }, - { data: 3, priority: 0 } + { data: 3, priority: 0 }, ]) expect(priorityQueue.head.next).toBe(undefined) expect(priorityQueue.tail.nodeArray).toMatchObject([ { data: 1, priority: 0 }, - { data: 2, priority: 0 } + { data: 2, priority: 0 }, ]) expect(priorityQueue.tail.next).toStrictEqual(priorityQueue.head) + expect(priorityQueue.tail).not.toStrictEqual(priorityQueue.head) 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) expect(priorityQueue.head.nodeArray).toMatchObject([ - { data: 1, priority: 1 } + { data: 1, priority: 1 }, ]) expect(priorityQueue.head.next).toBe(undefined) expect(priorityQueue.tail.nodeArray).toMatchObject([ { data: 1, priority: 0 }, - { data: 2, priority: 0 } + { data: 2, priority: 0 }, ]) - expect(priorityQueue.tail.next).not.toStrictEqual(priorityQueue.head) expect(priorityQueue.tail.next.nodeArray).toMatchObject([ { data: 3, priority: -1 }, - { data: 3, priority: 0 } + { data: 3, priority: 0 }, ]) + expect(priorityQueue.tail.next.next).toStrictEqual(priorityQueue.head) + expect(priorityQueue.tail.next).not.toStrictEqual(priorityQueue.head) + expect(priorityQueue.tail).not.toStrictEqual(priorityQueue.head) rtSize = priorityQueue.enqueue(3, -2) expect(priorityQueue.buckets).toBe(3) expect(priorityQueue.size).toBe(6) @@ -175,22 +181,24 @@ describe('Priority queue test suite', () => { expect(rtSize).toBe(priorityQueue.size) expect(priorityQueue.head.nodeArray).toMatchObject([ { data: 3, priority: -2 }, - { data: 1, priority: 1 } + { data: 1, priority: 1 }, ]) expect(priorityQueue.head.next).toBe(undefined) expect(priorityQueue.tail.nodeArray).toMatchObject([ { data: 1, priority: 0 }, - { data: 2, priority: 0 } + { data: 2, priority: 0 }, ]) - expect(priorityQueue.tail.next).not.toStrictEqual(priorityQueue.head) expect(priorityQueue.tail.next.nodeArray).toMatchObject([ { data: 3, priority: -1 }, - { data: 3, priority: 0 } + { data: 3, priority: 0 }, ]) + expect(priorityQueue.tail.next.next).toStrictEqual(priorityQueue.head) + expect(priorityQueue.tail.next).not.toStrictEqual(priorityQueue.head) + expect(priorityQueue.tail).not.toStrictEqual(priorityQueue.head) }) it('Verify default bucket size dequeue() behavior', () => { - const priorityQueue = new PriorityQueue() + const priorityQueue = new PriorityQueue(defaultBucketSize, true) priorityQueue.enqueue(1) priorityQueue.enqueue(2, -1) priorityQueue.enqueue(3) @@ -199,6 +207,7 @@ describe('Priority queue test suite', () => { expect(priorityQueue.maxSize).toBe(3) expect(priorityQueue.tail.empty()).toBe(false) expect(priorityQueue.tail.next).toBe(undefined) + expect(priorityQueue.tail).toStrictEqual(priorityQueue.head) let rtItem = priorityQueue.dequeue() expect(priorityQueue.buckets).toBe(0) expect(priorityQueue.size).toBe(2) @@ -206,6 +215,7 @@ describe('Priority queue test suite', () => { expect(rtItem).toBe(2) expect(priorityQueue.tail.empty()).toBe(false) expect(priorityQueue.tail.next).toBe(undefined) + expect(priorityQueue.tail).toStrictEqual(priorityQueue.head) rtItem = priorityQueue.dequeue() expect(priorityQueue.buckets).toBe(0) expect(priorityQueue.size).toBe(1) @@ -213,6 +223,7 @@ describe('Priority queue test suite', () => { expect(rtItem).toBe(1) expect(priorityQueue.tail.empty()).toBe(false) expect(priorityQueue.tail.next).toBe(undefined) + expect(priorityQueue.tail).toStrictEqual(priorityQueue.head) rtItem = priorityQueue.dequeue() expect(priorityQueue.buckets).toBe(0) expect(priorityQueue.size).toBe(0) @@ -220,10 +231,11 @@ describe('Priority queue test suite', () => { expect(rtItem).toBe(3) expect(priorityQueue.tail.empty()).toBe(true) expect(priorityQueue.tail.next).toBe(undefined) + expect(priorityQueue.tail).toStrictEqual(priorityQueue.head) }) it('Verify bucketSize=2 dequeue() behavior', () => { - const priorityQueue = new PriorityQueue(2) + const priorityQueue = new PriorityQueue(2, true) priorityQueue.enqueue(1) priorityQueue.enqueue(2) priorityQueue.enqueue(3) @@ -235,6 +247,7 @@ describe('Priority queue test suite', () => { expect(priorityQueue.maxSize).toBe(6) expect(priorityQueue.tail.empty()).toBe(false) expect(priorityQueue.tail.next).toBeInstanceOf(FixedPriorityQueue) + expect(priorityQueue.tail).not.toStrictEqual(priorityQueue.head) let rtItem = priorityQueue.dequeue(3) expect(priorityQueue.buckets).toBe(2) expect(priorityQueue.size).toBe(5) @@ -242,6 +255,7 @@ describe('Priority queue test suite', () => { expect(rtItem).toBe(3) expect(priorityQueue.tail.empty()).toBe(false) expect(priorityQueue.tail.next).toBeInstanceOf(FixedPriorityQueue) + expect(priorityQueue.tail).not.toStrictEqual(priorityQueue.head) rtItem = priorityQueue.dequeue() expect(priorityQueue.buckets).toBe(2) expect(priorityQueue.size).toBe(4) @@ -249,6 +263,7 @@ describe('Priority queue test suite', () => { expect(rtItem).toBe(1) expect(priorityQueue.tail.empty()).toBe(false) expect(priorityQueue.tail.next).toBeInstanceOf(FixedPriorityQueue) + expect(priorityQueue.tail).not.toStrictEqual(priorityQueue.head) rtItem = priorityQueue.dequeue(2) expect(priorityQueue.buckets).toBe(1) expect(priorityQueue.size).toBe(3) @@ -256,6 +271,7 @@ describe('Priority queue test suite', () => { expect(rtItem).toBe(3) expect(priorityQueue.tail.empty()).toBe(false) expect(priorityQueue.tail.next).toBeInstanceOf(FixedPriorityQueue) + expect(priorityQueue.tail).not.toStrictEqual(priorityQueue.head) rtItem = priorityQueue.dequeue(2) expect(priorityQueue.buckets).toBe(1) expect(priorityQueue.size).toBe(2) @@ -263,13 +279,15 @@ describe('Priority queue test suite', () => { expect(rtItem).toBe(3) expect(priorityQueue.tail.empty()).toBe(false) expect(priorityQueue.tail.next).toBeInstanceOf(FixedPriorityQueue) + expect(priorityQueue.tail).not.toStrictEqual(priorityQueue.head) rtItem = priorityQueue.dequeue(2) expect(priorityQueue.buckets).toBe(0) expect(priorityQueue.size).toBe(1) expect(priorityQueue.maxSize).toBe(6) expect(rtItem).toBe(1) expect(priorityQueue.tail.empty()).toBe(false) - expect(priorityQueue.tail.next).toBeInstanceOf(FixedPriorityQueue) + expect(priorityQueue.tail.next).toBe(undefined) + expect(priorityQueue.tail).toStrictEqual(priorityQueue.head) rtItem = priorityQueue.dequeue() expect(priorityQueue.buckets).toBe(0) expect(priorityQueue.size).toBe(0) @@ -277,6 +295,31 @@ describe('Priority queue test suite', () => { expect(rtItem).toBe(2) expect(priorityQueue.tail.empty()).toBe(true) expect(priorityQueue.tail.next).toBe(undefined) + expect(priorityQueue.tail).toStrictEqual(priorityQueue.head) + }) + + it('Verify enablePriority setter behavior', () => { + const priorityQueue = new PriorityQueue(2) + expect(priorityQueue.enablePriority).toBe(false) + priorityQueue.enqueue(1) + priorityQueue.enqueue(2) + priorityQueue.enqueue(3) + priorityQueue.enqueue(4) + let buckets = 0 + let node = priorityQueue.tail + while (node != null) { + expect(node.enablePriority).toBe(false) + node = node.next + ++buckets + } + expect(buckets).toBe(2) + priorityQueue.enablePriority = true + expect(priorityQueue.enablePriority).toBe(true) + node = priorityQueue.tail + while (node != null) { + expect(node.enablePriority).toBe(true) + node = node.next + } }) it('Verify iterator behavior', () => {