build(deps-dev): apply updates
[poolifier.git] / tests / circular-buffer.test.mjs
1 import { expect } from 'expect'
2
3 import { CircularBuffer, defaultBufferSize } from '../lib/circular-buffer.cjs'
4
5 describe('Circular buffer test suite', () => {
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)
12 expect(circularBuffer.size).toBe(0)
13 expect(circularBuffer.items).toBeInstanceOf(Float32Array)
14 expect(circularBuffer.items.length).toBe(defaultBufferSize)
15 })
16
17 it('Verify that circular buffer size can be set at instance creation', () => {
18 const size = 1000
19 const circularBuffer = new CircularBuffer(size)
20 expect(circularBuffer.maxArrayIdx).toBe(size - 1)
21 expect(circularBuffer.items).toBeInstanceOf(Float32Array)
22 expect(circularBuffer.items.length).toBe(size)
23 })
24
25 it('Verify that circular buffer size is valid at instance creation', () => {
26 expect(() => new CircularBuffer(0.25)).toThrow(
27 new TypeError("Invalid circular buffer size: '0.25' is not an integer")
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(
34 `Invalid circular buffer size: '${
35 Number.MAX_SAFE_INTEGER + 1
36 }' is not an integer`
37 )
38 )
39 })
40
41 it('Verify that circular buffer put() works as intended', () => {
42 const circularBuffer = new CircularBuffer(4)
43 circularBuffer.put(1)
44 expect(circularBuffer.items).toStrictEqual(
45 new Float32Array([1, -1, -1, -1])
46 )
47 expect(circularBuffer.writeIdx).toBe(1)
48 expect(circularBuffer.size).toBe(1)
49 circularBuffer.put(2)
50 expect(circularBuffer.items).toStrictEqual(new Float32Array([1, 2, -1, -1]))
51 expect(circularBuffer.writeIdx).toBe(2)
52 expect(circularBuffer.size).toBe(2)
53 circularBuffer.put(3)
54 expect(circularBuffer.items).toStrictEqual(new Float32Array([1, 2, 3, -1]))
55 expect(circularBuffer.writeIdx).toBe(3)
56 expect(circularBuffer.size).toBe(3)
57 circularBuffer.put(4)
58 expect(circularBuffer.items).toStrictEqual(new Float32Array([1, 2, 3, 4]))
59 expect(circularBuffer.writeIdx).toBe(0)
60 expect(circularBuffer.size).toBe(4)
61 circularBuffer.put(5)
62 expect(circularBuffer.items).toStrictEqual(new Float32Array([5, 2, 3, 4]))
63 expect(circularBuffer.writeIdx).toBe(1)
64 expect(circularBuffer.size).toBe(4)
65 circularBuffer.put(6)
66 expect(circularBuffer.items).toStrictEqual(new Float32Array([5, 6, 3, 4]))
67 expect(circularBuffer.writeIdx).toBe(2)
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)
147 })
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 })
159 })