perf: use O(1) queue implementation in async locking code
[e-mobility-charging-stations-simulator.git] / test / utils / QueueTest.ts
1 /* eslint-disable @typescript-eslint/no-unsafe-member-access */
2 import { expect } from 'expect';
3
4 import { Queue } from '../../src/utils/Queue';
5
6 describe('Queue test suite', () => {
7 it('Verify enqueue() behavior', () => {
8 const queue = new Queue();
9 let rtSize = queue.enqueue(1);
10 expect(queue.size).toBe(1);
11 expect(rtSize).toBe(queue.size);
12 expect((queue as any).head).toBe(0);
13 expect((queue as any).tail).toBe(1);
14 expect((queue as any).items).toStrictEqual({ 0: 1 });
15 rtSize = queue.enqueue(2);
16 expect(queue.size).toBe(2);
17 expect(rtSize).toBe(queue.size);
18 expect((queue as any).head).toBe(0);
19 expect((queue as any).tail).toBe(2);
20 expect((queue as any).items).toStrictEqual({ 0: 1, 1: 2 });
21 rtSize = queue.enqueue(3);
22 expect(queue.size).toBe(3);
23 expect(rtSize).toBe(queue.size);
24 expect((queue as any).head).toBe(0);
25 expect((queue as any).tail).toBe(3);
26 expect((queue as any).items).toStrictEqual({ 0: 1, 1: 2, 2: 3 });
27 });
28
29 it('Verify dequeue() behavior', () => {
30 const queue = new Queue();
31 queue.enqueue(1);
32 queue.enqueue(2);
33 queue.enqueue(3);
34 let rtItem = queue.dequeue();
35 expect(queue.size).toBe(2);
36 expect(rtItem).toBe(1);
37 expect((queue as any).head).toBe(1);
38 expect((queue as any).tail).toBe(3);
39 expect((queue as any).items).toStrictEqual({ 1: 2, 2: 3 });
40 rtItem = queue.dequeue();
41 expect(queue.size).toBe(1);
42 expect(rtItem).toBe(2);
43 expect((queue as any).head).toBe(2);
44 expect((queue as any).tail).toBe(3);
45 expect((queue as any).items).toStrictEqual({ 2: 3 });
46 rtItem = queue.dequeue();
47 expect(queue.size).toBe(0);
48 expect(rtItem).toBe(3);
49 expect((queue as any).head).toBe(0);
50 expect((queue as any).tail).toBe(0);
51 expect((queue as any).items).toStrictEqual({});
52 });
53 });