1 const { expect
} = require('expect')
2 const { CircularArray
} = require('../lib/circular-array')
4 describe('Circular array test suite', () => {
5 it('Verify that circular array can be instantiated', () => {
6 const circularArray
= new CircularArray()
7 expect(circularArray
).toBeInstanceOf(CircularArray
)
10 it('Verify circular array default size at instance creation', () => {
11 const circularArray
= new CircularArray()
12 expect(circularArray
.size
).toBe(1024)
15 it('Verify that circular array size can be set at instance creation', () => {
16 const circularArray
= new CircularArray(1000)
17 expect(circularArray
.size
).toBe(1000)
20 it('Verify that circular array size and items can be set at instance creation', () => {
21 let circularArray
= new CircularArray(1000, 1, 2, 3, 4, 5)
22 expect(circularArray
.size
).toBe(1000)
23 expect(circularArray
.length
).toBe(5)
24 circularArray
= new CircularArray(4, 1, 2, 3, 4, 5)
25 expect(circularArray
.size
).toBe(4)
26 expect(circularArray
.length
).toBe(4)
29 it('Verify that circular array size is valid at instance creation', () => {
30 expect(() => new CircularArray(0.25)).toThrowError(
31 new TypeError('Invalid circular array size: 0.25 is not a safe integer')
33 expect(() => new CircularArray(-1)).toThrowError(
34 new RangeError('Invalid circular array size: -1 < 0')
36 expect(() => new CircularArray(Number
.MAX_SAFE_INTEGER
+ 1)).toThrowError(
38 `Invalid circular array size: ${
39 Number.MAX_SAFE_INTEGER + 1
40 } is not a safe integer`
45 it('Verify that circular array empty works as intended', () => {
46 const circularArray
= new CircularArray()
47 expect(circularArray
.empty()).toBe(true)
50 it('Verify that circular array full works as intended', () => {
51 const circularArray
= new CircularArray(5, 1, 2, 3, 4, 5)
52 expect(circularArray
.full()).toBe(true)
55 it('Verify that circular array push works as intended', () => {
56 let circularArray
= new CircularArray(4)
57 let arrayLength
= circularArray
.push(1, 2, 3, 4, 5)
58 expect(arrayLength
).toBe(circularArray
.size
)
59 expect(circularArray
.length
).toBe(circularArray
.size
)
60 expect(circularArray
).toStrictEqual(new CircularArray(4, 2, 3, 4, 5))
61 arrayLength
= circularArray
.push(6, 7)
62 expect(arrayLength
).toBe(circularArray
.size
)
63 expect(circularArray
.length
).toBe(circularArray
.size
)
64 expect(circularArray
).toStrictEqual(new CircularArray(4, 4, 5, 6, 7))
65 circularArray
= new CircularArray(100)
66 arrayLength
= circularArray
.push(1, 2, 3, 4, 5)
67 expect(arrayLength
).toBe(5)
68 expect(circularArray
.size
).toBe(100)
69 expect(circularArray
.length
).toBe(5)
70 expect(circularArray
).toStrictEqual(new CircularArray(100, 1, 2, 3, 4, 5))
73 it('Verify that circular array splice works as intended', () => {
74 let circularArray
= new CircularArray(1000, 1, 2, 3, 4, 5)
75 let deletedItems
= circularArray
.splice(2)
76 expect(deletedItems
).toStrictEqual(new CircularArray(3, 3, 4, 5))
77 expect(circularArray
.length
).toBe(2)
78 expect(circularArray
).toStrictEqual(new CircularArray(1000, 1, 2))
79 circularArray
= new CircularArray(1000, 1, 2, 3, 4, 5)
80 deletedItems
= circularArray
.splice(2, 1)
81 expect(deletedItems
).toStrictEqual(new CircularArray(1, 3))
82 expect(circularArray
.length
).toBe(4)
83 expect(circularArray
).toStrictEqual(new CircularArray(1000, 1, 2, 4, 5))
84 circularArray
= new CircularArray(4, 1, 2, 3, 4)
85 deletedItems
= circularArray
.splice(2, 1, 5, 6)
86 expect(deletedItems
).toStrictEqual(new CircularArray(1, 3))
87 expect(circularArray
.length
).toBe(4)
88 expect(circularArray
).toStrictEqual(new CircularArray(4, 2, 4, 5, 6))
91 it('Verify that circular array concat works as intended', () => {
92 let circularArray
= new CircularArray(5, 1, 2, 3, 4, 5)
93 circularArray
= circularArray
.concat(6, 7)
94 expect(circularArray
.length
).toBe(5)
95 expect(circularArray
).toStrictEqual(new CircularArray(5, 3, 4, 5, 6, 7))
96 circularArray
= new CircularArray(1)
97 circularArray
= circularArray
.concat(6, 7)
98 expect(circularArray
.length
).toBe(1)
99 expect(circularArray
).toStrictEqual(new CircularArray(1, 7))
102 it('Verify that circular array unshift works as intended', () => {
103 let circularArray
= new CircularArray(5, 1, 2, 3, 4, 5)
104 let arrayLength
= circularArray
.unshift(6, 7)
105 expect(arrayLength
).toBe(5)
106 expect(circularArray
.length
).toBe(5)
107 expect(circularArray
).toStrictEqual(new CircularArray(5, 6, 7, 1, 2, 3))
108 circularArray
= new CircularArray(1)
109 arrayLength
= circularArray
.unshift(6, 7)
110 expect(arrayLength
).toBe(1)
111 expect(circularArray
.length
).toBe(1)
112 expect(circularArray
).toStrictEqual(new CircularArray(1, 6))
115 it('Verify that circular array resize works as intended', () => {
116 expect(() => new CircularArray().resize(0.25)).toThrowError(
117 new TypeError('Invalid circular array size: 0.25 is not a safe integer')
119 expect(() => new CircularArray().resize(-1)).toThrowError(
120 new RangeError('Invalid circular array size: -1 < 0')
123 new CircularArray().resize(Number
.MAX_SAFE_INTEGER
+ 1)
126 `Invalid circular array size: ${
127 Number.MAX_SAFE_INTEGER + 1
128 } is not a safe integer`
131 let circularArray
= new CircularArray(5, 1, 2, 3, 4, 5)
132 circularArray
.resize(0)
133 expect(circularArray
.size
).toBe(0)
134 expect(circularArray
).toStrictEqual(new CircularArray(0))
135 circularArray
= new CircularArray(5, 1, 2, 3, 4, 5)
136 circularArray
.resize(3)
137 expect(circularArray
.size
).toBe(3)
138 expect(circularArray
).toStrictEqual(new CircularArray(3, 1, 2, 3))
139 circularArray
= new CircularArray(5, 1, 2, 3, 4, 5)
140 circularArray
.resize(8)
141 expect(circularArray
.size
).toBe(8)
142 expect(circularArray
).toStrictEqual(new CircularArray(8, 1, 2, 3, 4, 5))