1 import { describe
, it
} from
'node:test'
3 import { expect
} from
'expect'
5 import { CircularArray
, DEFAULT_CIRCULAR_ARRAY_SIZE
} from
'../../src/utils/CircularArray.js'
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
)
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
)
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)
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)
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')
36 expect(() => new CircularArray(-1)).toThrow(
37 new RangeError('Invalid circular array size: -1 < 0')
39 expect(() => new CircularArray(Number.MAX_SAFE_INTEGER
+ 1)).toThrow(
41 `Invalid circular array size: ${Number.MAX_SAFE_INTEGER + 1} is not a safe integer`
46 await it('Verify that circular array empty works as intended', () => {
47 const circularArray
= new CircularArray()
48 expect(circularArray
.empty()).toBe(true)
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)
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))
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))
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))
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))
116 await it('Verify that circular array resize works as intended', () => {
118 new CircularArray().resize(0.25)
119 }).toThrow(new TypeError('Invalid circular array size: 0.25 is not a safe integer'))
121 new CircularArray().resize(-1)
122 }).toThrow(new RangeError('Invalid circular array size: -1 < 0'))
124 new CircularArray().resize(Number.MAX_SAFE_INTEGER
+ 1)
127 `Invalid circular array size: ${Number.MAX_SAFE_INTEGER + 1} is not a safe integer`
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))