chore: switch coding style to JS standard
[e-mobility-charging-stations-simulator.git] / tests / utils / CircularArray.test.ts
1 import { describe, it } from 'node:test'
2
3 import { expect } from 'expect'
4
5 import { CircularArray, DEFAULT_CIRCULAR_ARRAY_SIZE } from '../../src/utils/CircularArray.js'
6
7 await describe('CircularArray test suite', async () => {
8 await it('Verify that circular array can be instantiated', () => {
9 const circularArray = new CircularArray()
10 expect(circularArray).toBeInstanceOf(CircularArray)
11 })
12
13 await it('Verify circular array default size at instance creation', () => {
14 const circularArray = new CircularArray()
15 expect(circularArray.size).toBe(DEFAULT_CIRCULAR_ARRAY_SIZE)
16 })
17
18 await it('Verify that circular array size can be set at instance creation', () => {
19 const circularArray = new CircularArray(1000)
20 expect(circularArray.size).toBe(1000)
21 })
22
23 await it('Verify that circular array size and items can be set at instance creation', () => {
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
32 await it('Verify that circular array size is valid at instance creation', () => {
33 expect(() => new CircularArray(0.25)).toThrow(
34 new TypeError('Invalid circular array size: 0.25 is not a safe integer')
35 )
36 expect(() => new CircularArray(-1)).toThrow(
37 new RangeError('Invalid circular array size: -1 < 0')
38 )
39 expect(() => new CircularArray(Number.MAX_SAFE_INTEGER + 1)).toThrow(
40 new TypeError(
41 `Invalid circular array size: ${Number.MAX_SAFE_INTEGER + 1} is not a safe integer`
42 )
43 )
44 })
45
46 await it('Verify that circular array empty works as intended', () => {
47 const circularArray = new CircularArray()
48 expect(circularArray.empty()).toBe(true)
49 })
50
51 await it('Verify that circular array full works as intended', () => {
52 const circularArray = new CircularArray(5, 1, 2, 3, 4, 5)
53 expect(circularArray.full()).toBe(true)
54 })
55
56 await it('Verify that circular array push works as intended', () => {
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
74 await it('Verify that circular array splice works as intended', () => {
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)
87 expect(deletedItems).toStrictEqual(new CircularArray(2, 3, 1))
88 expect(circularArray.length).toBe(4)
89 expect(circularArray).toStrictEqual(new CircularArray(4, 2, 5, 6, 4))
90 })
91
92 await it('Verify that circular array concat works as intended', () => {
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
103 await it('Verify that circular array unshift works as intended', () => {
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
116 await it('Verify that circular array resize works as intended', () => {
117 expect(() => {
118 new CircularArray().resize(0.25)
119 }).toThrow(new TypeError('Invalid circular array size: 0.25 is not a safe integer'))
120 expect(() => {
121 new CircularArray().resize(-1)
122 }).toThrow(new RangeError('Invalid circular array size: -1 < 0'))
123 expect(() => {
124 new CircularArray().resize(Number.MAX_SAFE_INTEGER + 1)
125 }).toThrow(
126 new TypeError(
127 `Invalid circular array size: ${Number.MAX_SAFE_INTEGER + 1} is not a safe integer`
128 )
129 )
130 let circularArray = new CircularArray(5, 1, 2, 3, 4, 5)
131 circularArray.resize(0)
132 expect(circularArray.size).toBe(0)
133 expect(circularArray).toStrictEqual(new CircularArray(0))
134 circularArray = new CircularArray(5, 1, 2, 3, 4, 5)
135 circularArray.resize(1)
136 expect(circularArray.size).toBe(1)
137 expect(circularArray).toStrictEqual(new CircularArray(1, 1))
138 circularArray = new CircularArray(5, 1, 2, 3, 4, 5)
139 circularArray.resize(3)
140 expect(circularArray.size).toBe(3)
141 expect(circularArray).toStrictEqual(new CircularArray(3, 1, 2, 3))
142 circularArray = new CircularArray(5, 1, 2, 3, 4, 5)
143 circularArray.resize(8)
144 expect(circularArray.size).toBe(8)
145 expect(circularArray).toStrictEqual(new CircularArray(8, 1, 2, 3, 4, 5))
146 })
147 })