Commit | Line | Data |
---|---|---|
a074ffee JB |
1 | import { expect } from 'expect' |
2 | import { | |
4b280f81 JB |
3 | CircularArray, |
4 | DEFAULT_CIRCULAR_ARRAY_SIZE | |
a074ffee | 5 | } from '../lib/circular-array.js' |
78099a15 JB |
6 | |
7 | describe('Circular array test suite', () => { | |
8 | it('Verify that circular array can be instantiated', () => { | |
9 | const circularArray = new CircularArray() | |
10 | expect(circularArray).toBeInstanceOf(CircularArray) | |
11 | }) | |
12 | ||
13 | it('Verify circular array default size at instance creation', () => { | |
14 | const circularArray = new CircularArray() | |
4b280f81 | 15 | expect(circularArray.size).toBe(DEFAULT_CIRCULAR_ARRAY_SIZE) |
78099a15 JB |
16 | }) |
17 | ||
18 | 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 | 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 | it('Verify that circular array size is valid at instance creation', () => { | |
948faff7 | 33 | expect(() => new CircularArray(0.25)).toThrow( |
78099a15 JB |
34 | new TypeError('Invalid circular array size: 0.25 is not a safe integer') |
35 | ) | |
948faff7 | 36 | expect(() => new CircularArray(-1)).toThrow( |
78099a15 JB |
37 | new RangeError('Invalid circular array size: -1 < 0') |
38 | ) | |
948faff7 | 39 | expect(() => new CircularArray(Number.MAX_SAFE_INTEGER + 1)).toThrow( |
78099a15 JB |
40 | new TypeError( |
41 | `Invalid circular array size: ${ | |
42 | Number.MAX_SAFE_INTEGER + 1 | |
43 | } is not a safe integer` | |
44 | ) | |
45 | ) | |
46 | }) | |
47 | ||
48 | it('Verify that circular array empty works as intended', () => { | |
49 | const circularArray = new CircularArray() | |
50 | expect(circularArray.empty()).toBe(true) | |
51 | }) | |
52 | ||
53 | it('Verify that circular array full works as intended', () => { | |
54 | const circularArray = new CircularArray(5, 1, 2, 3, 4, 5) | |
55 | expect(circularArray.full()).toBe(true) | |
56 | }) | |
57 | ||
58 | it('Verify that circular array push works as intended', () => { | |
59 | let circularArray = new CircularArray(4) | |
60 | let arrayLength = circularArray.push(1, 2, 3, 4, 5) | |
61 | expect(arrayLength).toBe(circularArray.size) | |
62 | expect(circularArray.length).toBe(circularArray.size) | |
63 | expect(circularArray).toStrictEqual(new CircularArray(4, 2, 3, 4, 5)) | |
64 | arrayLength = circularArray.push(6, 7) | |
65 | expect(arrayLength).toBe(circularArray.size) | |
66 | expect(circularArray.length).toBe(circularArray.size) | |
67 | expect(circularArray).toStrictEqual(new CircularArray(4, 4, 5, 6, 7)) | |
68 | circularArray = new CircularArray(100) | |
69 | arrayLength = circularArray.push(1, 2, 3, 4, 5) | |
70 | expect(arrayLength).toBe(5) | |
71 | expect(circularArray.size).toBe(100) | |
72 | expect(circularArray.length).toBe(5) | |
73 | expect(circularArray).toStrictEqual(new CircularArray(100, 1, 2, 3, 4, 5)) | |
74 | }) | |
75 | ||
76 | it('Verify that circular array splice works as intended', () => { | |
77 | let circularArray = new CircularArray(1000, 1, 2, 3, 4, 5) | |
78 | let deletedItems = circularArray.splice(2) | |
79 | expect(deletedItems).toStrictEqual(new CircularArray(3, 3, 4, 5)) | |
80 | expect(circularArray.length).toBe(2) | |
81 | expect(circularArray).toStrictEqual(new CircularArray(1000, 1, 2)) | |
82 | circularArray = new CircularArray(1000, 1, 2, 3, 4, 5) | |
83 | deletedItems = circularArray.splice(2, 1) | |
84 | expect(deletedItems).toStrictEqual(new CircularArray(1, 3)) | |
85 | expect(circularArray.length).toBe(4) | |
86 | expect(circularArray).toStrictEqual(new CircularArray(1000, 1, 2, 4, 5)) | |
87 | circularArray = new CircularArray(4, 1, 2, 3, 4) | |
88 | deletedItems = circularArray.splice(2, 1, 5, 6) | |
4077981d | 89 | expect(deletedItems).toStrictEqual(new CircularArray(2, 3, 1)) |
78099a15 | 90 | expect(circularArray.length).toBe(4) |
4077981d | 91 | expect(circularArray).toStrictEqual(new CircularArray(4, 2, 5, 6, 4)) |
78099a15 JB |
92 | }) |
93 | ||
94 | it('Verify that circular array concat works as intended', () => { | |
95 | let circularArray = new CircularArray(5, 1, 2, 3, 4, 5) | |
96 | circularArray = circularArray.concat(6, 7) | |
97 | expect(circularArray.length).toBe(5) | |
98 | expect(circularArray).toStrictEqual(new CircularArray(5, 3, 4, 5, 6, 7)) | |
99 | circularArray = new CircularArray(1) | |
100 | circularArray = circularArray.concat(6, 7) | |
101 | expect(circularArray.length).toBe(1) | |
102 | expect(circularArray).toStrictEqual(new CircularArray(1, 7)) | |
103 | }) | |
104 | ||
105 | it('Verify that circular array unshift works as intended', () => { | |
106 | let circularArray = new CircularArray(5, 1, 2, 3, 4, 5) | |
107 | let arrayLength = circularArray.unshift(6, 7) | |
108 | expect(arrayLength).toBe(5) | |
109 | expect(circularArray.length).toBe(5) | |
110 | expect(circularArray).toStrictEqual(new CircularArray(5, 6, 7, 1, 2, 3)) | |
111 | circularArray = new CircularArray(1) | |
112 | arrayLength = circularArray.unshift(6, 7) | |
113 | expect(arrayLength).toBe(1) | |
114 | expect(circularArray.length).toBe(1) | |
115 | expect(circularArray).toStrictEqual(new CircularArray(1, 6)) | |
116 | }) | |
117 | ||
118 | it('Verify that circular array resize works as intended', () => { | |
948faff7 | 119 | expect(() => new CircularArray().resize(0.25)).toThrow( |
78099a15 JB |
120 | new TypeError('Invalid circular array size: 0.25 is not a safe integer') |
121 | ) | |
948faff7 | 122 | expect(() => new CircularArray().resize(-1)).toThrow( |
78099a15 JB |
123 | new RangeError('Invalid circular array size: -1 < 0') |
124 | ) | |
125 | expect(() => | |
126 | new CircularArray().resize(Number.MAX_SAFE_INTEGER + 1) | |
948faff7 | 127 | ).toThrow( |
78099a15 JB |
128 | new TypeError( |
129 | `Invalid circular array size: ${ | |
130 | Number.MAX_SAFE_INTEGER + 1 | |
131 | } is not a safe integer` | |
132 | ) | |
133 | ) | |
134 | let circularArray = new CircularArray(5, 1, 2, 3, 4, 5) | |
135 | circularArray.resize(0) | |
136 | expect(circularArray.size).toBe(0) | |
137 | expect(circularArray).toStrictEqual(new CircularArray(0)) | |
138 | circularArray = new CircularArray(5, 1, 2, 3, 4, 5) | |
d655027b JB |
139 | circularArray.resize(1) |
140 | expect(circularArray.size).toBe(1) | |
141 | expect(circularArray).toStrictEqual(new CircularArray(1, 1)) | |
142 | circularArray = new CircularArray(5, 1, 2, 3, 4, 5) | |
78099a15 JB |
143 | circularArray.resize(3) |
144 | expect(circularArray.size).toBe(3) | |
145 | expect(circularArray).toStrictEqual(new CircularArray(3, 1, 2, 3)) | |
146 | circularArray = new CircularArray(5, 1, 2, 3, 4, 5) | |
147 | circularArray.resize(8) | |
148 | expect(circularArray.size).toBe(8) | |
149 | expect(circularArray).toStrictEqual(new CircularArray(8, 1, 2, 3, 4, 5)) | |
150 | }) | |
151 | }) |