test: rename test -> tests
[e-mobility-charging-stations-simulator.git] / tests / utils / CircularArray.test.ts
CommitLineData
6c43b441
JB
1import { describe, it } from 'node:test';
2
1e953fd9 3import { expect } from 'expect';
4082efc1 4
c7ba22b7 5import { CircularArray, DEFAULT_CIRCULAR_ARRAY_SIZE } from '../../src/utils/CircularArray';
8114d10e 6
6c43b441
JB
7await describe('CircularArray test suite', async () => {
8 await it('Verify that circular array can be instantiated', () => {
4082efc1
JB
9 const circularArray = new CircularArray();
10 expect(circularArray).toBeInstanceOf(CircularArray);
11 });
12
6c43b441 13 await it('Verify circular array default size at instance creation', () => {
4082efc1 14 const circularArray = new CircularArray();
c7ba22b7 15 expect(circularArray.size).toBe(DEFAULT_CIRCULAR_ARRAY_SIZE);
4082efc1
JB
16 });
17
6c43b441 18 await it('Verify that circular array size can be set at instance creation', () => {
4082efc1
JB
19 const circularArray = new CircularArray(1000);
20 expect(circularArray.size).toBe(1000);
21 });
22
6c43b441 23 await it('Verify that circular array size and items can be set at instance creation', () => {
4082efc1
JB
24 let circularArray = new CircularArray(1000, 1, 2, 3, 4, 5);
25 expect(circularArray.size).toBe(1000);
26 expect(circularArray.length).toBe(5);
27 circularArray = new CircularArray(4, 1, 2, 3, 4, 5);
28 expect(circularArray.size).toBe(4);
29 expect(circularArray.length).toBe(4);
30 });
31
6c43b441 32 await it('Verify that circular array size is valid at instance creation', () => {
4cf1f68c 33 expect(() => new CircularArray(0.25)).toThrowError(
5edd8ba0 34 new TypeError('Invalid circular array size: 0.25 is not a safe integer'),
4cf1f68c
JB
35 );
36 expect(() => new CircularArray(-1)).toThrowError(
5edd8ba0 37 new RangeError('Invalid circular array size: -1 < 0'),
4cf1f68c
JB
38 );
39 expect(() => new CircularArray(Number.MAX_SAFE_INTEGER + 1)).toThrowError(
40 new TypeError(
5edd8ba0
JB
41 `Invalid circular array size: ${Number.MAX_SAFE_INTEGER + 1} is not a safe integer`,
42 ),
4cf1f68c 43 );
4082efc1
JB
44 });
45
6c43b441 46 await it('Verify that circular array empty works as intended', () => {
4082efc1
JB
47 const circularArray = new CircularArray();
48 expect(circularArray.empty()).toBe(true);
49 });
50
6c43b441 51 await it('Verify that circular array full works as intended', () => {
4082efc1
JB
52 const circularArray = new CircularArray(5, 1, 2, 3, 4, 5);
53 expect(circularArray.full()).toBe(true);
54 });
55
6c43b441 56 await it('Verify that circular array push works as intended', () => {
4082efc1
JB
57 let circularArray = new CircularArray(4);
58 let arrayLength = circularArray.push(1, 2, 3, 4, 5);
59 expect(arrayLength).toBe(circularArray.size);
60 expect(circularArray.length).toBe(circularArray.size);
61 expect(circularArray).toStrictEqual(new CircularArray(4, 2, 3, 4, 5));
62 arrayLength = circularArray.push(6, 7);
63 expect(arrayLength).toBe(circularArray.size);
64 expect(circularArray.length).toBe(circularArray.size);
65 expect(circularArray).toStrictEqual(new CircularArray(4, 4, 5, 6, 7));
66 circularArray = new CircularArray(100);
67 arrayLength = circularArray.push(1, 2, 3, 4, 5);
68 expect(arrayLength).toBe(5);
69 expect(circularArray.size).toBe(100);
70 expect(circularArray.length).toBe(5);
71 expect(circularArray).toStrictEqual(new CircularArray(100, 1, 2, 3, 4, 5));
72 });
73
6c43b441 74 await it('Verify that circular array splice works as intended', () => {
4082efc1
JB
75 let circularArray = new CircularArray(1000, 1, 2, 3, 4, 5);
76 let deletedItems = circularArray.splice(2);
77 expect(deletedItems).toStrictEqual(new CircularArray(3, 3, 4, 5));
78 expect(circularArray.length).toBe(2);
79 expect(circularArray).toStrictEqual(new CircularArray(1000, 1, 2));
80 circularArray = new CircularArray(1000, 1, 2, 3, 4, 5);
81 deletedItems = circularArray.splice(2, 1);
82 expect(deletedItems).toStrictEqual(new CircularArray(1, 3));
83 expect(circularArray.length).toBe(4);
84 expect(circularArray).toStrictEqual(new CircularArray(1000, 1, 2, 4, 5));
85 circularArray = new CircularArray(4, 1, 2, 3, 4);
86 deletedItems = circularArray.splice(2, 1, 5, 6);
f69c4304 87 expect(deletedItems).toStrictEqual(new CircularArray(2, 3, 1));
4082efc1 88 expect(circularArray.length).toBe(4);
f69c4304 89 expect(circularArray).toStrictEqual(new CircularArray(4, 2, 5, 6, 4));
4082efc1
JB
90 });
91
6c43b441 92 await it('Verify that circular array concat works as intended', () => {
4082efc1
JB
93 let circularArray = new CircularArray(5, 1, 2, 3, 4, 5);
94 circularArray = circularArray.concat(6, 7);
95 expect(circularArray.length).toBe(5);
96 expect(circularArray).toStrictEqual(new CircularArray(5, 3, 4, 5, 6, 7));
97 circularArray = new CircularArray(1);
98 circularArray = circularArray.concat(6, 7);
99 expect(circularArray.length).toBe(1);
100 expect(circularArray).toStrictEqual(new CircularArray(1, 7));
101 });
102
6c43b441 103 await it('Verify that circular array unshift works as intended', () => {
4082efc1
JB
104 let circularArray = new CircularArray(5, 1, 2, 3, 4, 5);
105 let arrayLength = circularArray.unshift(6, 7);
106 expect(arrayLength).toBe(5);
107 expect(circularArray.length).toBe(5);
108 expect(circularArray).toStrictEqual(new CircularArray(5, 6, 7, 1, 2, 3));
109 circularArray = new CircularArray(1);
110 arrayLength = circularArray.unshift(6, 7);
111 expect(arrayLength).toBe(1);
112 expect(circularArray.length).toBe(1);
113 expect(circularArray).toStrictEqual(new CircularArray(1, 6));
114 });
115
6c43b441 116 await it('Verify that circular array resize works as intended', () => {
4cf1f68c 117 expect(() => new CircularArray().resize(0.25)).toThrowError(
5edd8ba0 118 new TypeError('Invalid circular array size: 0.25 is not a safe integer'),
4cf1f68c 119 );
4082efc1 120 expect(() => new CircularArray().resize(-1)).toThrowError(
5edd8ba0 121 new RangeError('Invalid circular array size: -1 < 0'),
4cf1f68c
JB
122 );
123 expect(() => new CircularArray().resize(Number.MAX_SAFE_INTEGER + 1)).toThrowError(
124 new TypeError(
5edd8ba0
JB
125 `Invalid circular array size: ${Number.MAX_SAFE_INTEGER + 1} is not a safe integer`,
126 ),
4082efc1
JB
127 );
128 let circularArray = new CircularArray(5, 1, 2, 3, 4, 5);
129 circularArray.resize(0);
130 expect(circularArray.size).toBe(0);
131 expect(circularArray).toStrictEqual(new CircularArray(0));
132 circularArray = new CircularArray(5, 1, 2, 3, 4, 5);
b5ef1485
JB
133 circularArray.resize(1);
134 expect(circularArray.size).toBe(1);
135 expect(circularArray).toStrictEqual(new CircularArray(1, 1));
136 circularArray = new CircularArray(5, 1, 2, 3, 4, 5);
4082efc1
JB
137 circularArray.resize(3);
138 expect(circularArray.size).toBe(3);
139 expect(circularArray).toStrictEqual(new CircularArray(3, 1, 2, 3));
140 circularArray = new CircularArray(5, 1, 2, 3, 4, 5);
141 circularArray.resize(8);
142 expect(circularArray.size).toBe(8);
143 expect(circularArray).toStrictEqual(new CircularArray(8, 1, 2, 3, 4, 5));
144 });
145});