Merge pull request #2343 from poolifier/combined-prs-branch
[poolifier.git] / tests / circular-buffer.test.mjs
CommitLineData
f12182ad
JB
1import { expect } from 'expect'
2
3import { CircularBuffer, defaultBufferSize } from '../lib/circular-buffer.cjs'
4
5describe('Circular buffer test suite', t => {
6 it('Verify that circular buffer can be instantiated', () => {
7 const circularBuffer = new CircularBuffer()
8 expect(circularBuffer).toBeInstanceOf(CircularBuffer)
9 expect(circularBuffer.readIdx).toBe(0)
10 expect(circularBuffer.writeIdx).toBe(0)
11 expect(circularBuffer.maxArrayIdx).toBe(defaultBufferSize - 1)
cf42a4cf 12 expect(circularBuffer.size).toBe(0)
0cd1f28c 13 expect(circularBuffer.items).toBeInstanceOf(Float32Array)
f12182ad
JB
14 expect(circularBuffer.items.length).toBe(defaultBufferSize)
15 })
16
17 it('Verify that circular buffer size can be set at instance creation', () => {
cf42a4cf
JB
18 const size = 1000
19 const circularBuffer = new CircularBuffer(size)
20 expect(circularBuffer.maxArrayIdx).toBe(size - 1)
0cd1f28c 21 expect(circularBuffer.items).toBeInstanceOf(Float32Array)
cf42a4cf 22 expect(circularBuffer.items.length).toBe(size)
f12182ad
JB
23 })
24
25 it('Verify that circular buffer size is valid at instance creation', () => {
26 expect(() => new CircularBuffer(0.25)).toThrow(
f45a8925 27 new TypeError("Invalid circular buffer size: '0.25' is not an integer")
f12182ad
JB
28 )
29 expect(() => new CircularBuffer(-1)).toThrow(
30 new RangeError('Invalid circular buffer size: -1 < 0')
31 )
32 expect(() => new CircularBuffer(Number.MAX_SAFE_INTEGER + 1)).toThrow(
33 new TypeError(
f45a8925 34 `Invalid circular buffer size: '${
f12182ad 35 Number.MAX_SAFE_INTEGER + 1
f45a8925 36 }' is not an integer`
f12182ad
JB
37 )
38 )
39 })
40
41 it('Verify that circular buffer put() works as intended', () => {
42 const circularBuffer = new CircularBuffer(4)
43 circularBuffer.put(1)
0cd1f28c
JB
44 expect(circularBuffer.items).toStrictEqual(
45 new Float32Array([1, -1, -1, -1])
46 )
f12182ad 47 expect(circularBuffer.writeIdx).toBe(1)
cf42a4cf 48 expect(circularBuffer.size).toBe(1)
f12182ad 49 circularBuffer.put(2)
0cd1f28c 50 expect(circularBuffer.items).toStrictEqual(new Float32Array([1, 2, -1, -1]))
f12182ad 51 expect(circularBuffer.writeIdx).toBe(2)
cf42a4cf 52 expect(circularBuffer.size).toBe(2)
f12182ad 53 circularBuffer.put(3)
0cd1f28c 54 expect(circularBuffer.items).toStrictEqual(new Float32Array([1, 2, 3, -1]))
f12182ad 55 expect(circularBuffer.writeIdx).toBe(3)
cf42a4cf 56 expect(circularBuffer.size).toBe(3)
f12182ad 57 circularBuffer.put(4)
0cd1f28c 58 expect(circularBuffer.items).toStrictEqual(new Float32Array([1, 2, 3, 4]))
f12182ad 59 expect(circularBuffer.writeIdx).toBe(0)
cf42a4cf 60 expect(circularBuffer.size).toBe(4)
f12182ad 61 circularBuffer.put(5)
0cd1f28c 62 expect(circularBuffer.items).toStrictEqual(new Float32Array([5, 2, 3, 4]))
f12182ad 63 expect(circularBuffer.writeIdx).toBe(1)
cf42a4cf 64 expect(circularBuffer.size).toBe(4)
f12182ad 65 circularBuffer.put(6)
0cd1f28c 66 expect(circularBuffer.items).toStrictEqual(new Float32Array([5, 6, 3, 4]))
f12182ad 67 expect(circularBuffer.writeIdx).toBe(2)
cf42a4cf
JB
68 expect(circularBuffer.size).toBe(4)
69 })
70
71 it('Verify that circular buffer get() works as intended', () => {
72 const circularBuffer = new CircularBuffer(4)
73 circularBuffer.put(1)
74 circularBuffer.put(2)
75 circularBuffer.put(3)
76 circularBuffer.put(4)
77 expect(circularBuffer.get()).toBe(1)
78 expect(circularBuffer.readIdx).toBe(1)
79 expect(circularBuffer.size).toBe(3)
80 expect(circularBuffer.get()).toBe(2)
81 expect(circularBuffer.readIdx).toBe(2)
82 expect(circularBuffer.size).toBe(2)
83 circularBuffer.put(5)
84 circularBuffer.put(6)
85 expect(circularBuffer.get()).toBe(3)
86 expect(circularBuffer.readIdx).toBe(3)
87 expect(circularBuffer.size).toBe(3)
88 expect(circularBuffer.get()).toBe(4)
89 expect(circularBuffer.readIdx).toBe(0)
90 expect(circularBuffer.size).toBe(2)
91 expect(circularBuffer.get()).toBe(5)
92 expect(circularBuffer.readIdx).toBe(1)
93 expect(circularBuffer.size).toBe(1)
94 expect(circularBuffer.get()).toBe(6)
95 expect(circularBuffer.readIdx).toBe(2)
96 expect(circularBuffer.size).toBe(0)
97 expect(circularBuffer.get()).toBe(undefined)
98 expect(circularBuffer.readIdx).toBe(2)
99 expect(circularBuffer.size).toBe(0)
100 })
101
102 it('Verify that circular buffer empty() works as intended', () => {
103 const circularBuffer = new CircularBuffer(4)
104 expect(circularBuffer.empty()).toBe(true)
105 circularBuffer.put(1)
106 expect(circularBuffer.empty()).toBe(false)
107 circularBuffer.put(2)
108 expect(circularBuffer.empty()).toBe(false)
109 circularBuffer.put(3)
110 expect(circularBuffer.empty()).toBe(false)
111 circularBuffer.put(4)
112 expect(circularBuffer.empty()).toBe(false)
113 circularBuffer.get()
114 expect(circularBuffer.empty()).toBe(false)
115 circularBuffer.get()
116 expect(circularBuffer.empty()).toBe(false)
117 circularBuffer.get()
118 expect(circularBuffer.empty()).toBe(false)
119 circularBuffer.get()
120 expect(circularBuffer.empty()).toBe(true)
121 })
122
123 it('Verify that circular buffer full() works as intended', () => {
124 const circularBuffer = new CircularBuffer(4)
125 expect(circularBuffer.full()).toBe(false)
126 circularBuffer.put(1)
127 expect(circularBuffer.full()).toBe(false)
128 circularBuffer.put(2)
129 expect(circularBuffer.full()).toBe(false)
130 circularBuffer.put(3)
131 expect(circularBuffer.full()).toBe(false)
132 circularBuffer.put(4)
133 expect(circularBuffer.full()).toBe(true)
134 circularBuffer.get()
135 expect(circularBuffer.full()).toBe(false)
136 circularBuffer.put(5)
137 expect(circularBuffer.full()).toBe(true)
138 circularBuffer.get()
139 expect(circularBuffer.full()).toBe(false)
140 circularBuffer.get()
141 expect(circularBuffer.full()).toBe(false)
142 circularBuffer.get()
143 expect(circularBuffer.full()).toBe(false)
144 circularBuffer.get()
145 expect(circularBuffer.full()).toBe(false)
146 expect(circularBuffer.empty()).toBe(true)
f12182ad 147 })
bad5c705
JB
148
149 it('Verify that circular buffer toArray() works as intended', () => {
150 const circularBuffer = new CircularBuffer(4)
151 circularBuffer.put(1)
152 circularBuffer.put(2)
153 circularBuffer.put(3)
154 circularBuffer.put(4)
155 circularBuffer.put(5)
156 circularBuffer.put(6)
157 expect(circularBuffer.toArray()).toStrictEqual([5, 6, 3, 4])
158 })
f12182ad 159})