1 import { expect } from 'expect'
3 import { CircularBuffer, defaultBufferSize } from '../lib/circular-buffer.cjs'
5 describe('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)
12 expect(circularBuffer.size).toBe(0)
13 expect(circularBuffer.items).toBeInstanceOf(Float32Array)
14 expect(circularBuffer.items.length).toBe(defaultBufferSize)
17 it('Verify that circular buffer size can be set at instance creation', () => {
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)
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")
29 expect(() => new CircularBuffer(-1)).toThrow(
30 new RangeError('Invalid circular buffer size: -1 < 0')
32 expect(() => new CircularBuffer(Number.MAX_SAFE_INTEGER + 1)).toThrow(
34 `Invalid circular buffer size: '${
35 Number.MAX_SAFE_INTEGER + 1
41 it('Verify that circular buffer put() works as intended', () => {
42 const circularBuffer = new CircularBuffer(4)
44 expect(circularBuffer.items).toStrictEqual(
45 new Float32Array([1, -1, -1, -1])
47 expect(circularBuffer.writeIdx).toBe(1)
48 expect(circularBuffer.size).toBe(1)
50 expect(circularBuffer.items).toStrictEqual(new Float32Array([1, 2, -1, -1]))
51 expect(circularBuffer.writeIdx).toBe(2)
52 expect(circularBuffer.size).toBe(2)
54 expect(circularBuffer.items).toStrictEqual(new Float32Array([1, 2, 3, -1]))
55 expect(circularBuffer.writeIdx).toBe(3)
56 expect(circularBuffer.size).toBe(3)
58 expect(circularBuffer.items).toStrictEqual(new Float32Array([1, 2, 3, 4]))
59 expect(circularBuffer.writeIdx).toBe(0)
60 expect(circularBuffer.size).toBe(4)
62 expect(circularBuffer.items).toStrictEqual(new Float32Array([5, 2, 3, 4]))
63 expect(circularBuffer.writeIdx).toBe(1)
64 expect(circularBuffer.size).toBe(4)
66 expect(circularBuffer.items).toStrictEqual(new Float32Array([5, 6, 3, 4]))
67 expect(circularBuffer.writeIdx).toBe(2)
68 expect(circularBuffer.size).toBe(4)
71 it('Verify that circular buffer get() works as intended', () => {
72 const circularBuffer = new CircularBuffer(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)
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)
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)
114 expect(circularBuffer.empty()).toBe(false)
116 expect(circularBuffer.empty()).toBe(false)
118 expect(circularBuffer.empty()).toBe(false)
120 expect(circularBuffer.empty()).toBe(true)
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)
135 expect(circularBuffer.full()).toBe(false)
136 circularBuffer.put(5)
137 expect(circularBuffer.full()).toBe(true)
139 expect(circularBuffer.full()).toBe(false)
141 expect(circularBuffer.full()).toBe(false)
143 expect(circularBuffer.full()).toBe(false)
145 expect(circularBuffer.full()).toBe(false)
146 expect(circularBuffer.empty()).toBe(true)
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])