|
2 | 2 |
|
3 | 3 | import { createArrayBufferViews } from '../src'; |
4 | 4 |
|
| 5 | +const alignTo = (offset: number, alignment: number): number => { |
| 6 | + return (offset + alignment - 1) & ~(alignment - 1) |
| 7 | +} |
| 8 | + |
5 | 9 | describe('createArrayBufferViews', () => { |
6 | 10 | it('should create the correct TypedArray views with ArrayBuffer', () => { |
7 | 11 | const views = createArrayBufferViews(ArrayBuffer, { |
8 | 12 | data: [Float32Array, 1024], |
9 | 13 | index: [Uint32Array, 1], |
10 | | - flag: [Uint8Array, 1] |
| 14 | + flag: [Uint8Array, 1], |
| 15 | + u32: [Uint32Array, 1], |
| 16 | + u64: [BigUint64Array, 1], |
11 | 17 | }); |
12 | 18 |
|
| 19 | + expect(views.data.byteOffset).toBe(0); |
13 | 20 | expect(views.data.length).toBe(1024); |
| 21 | + expect(views.index.byteOffset).toBe(1024 * Float32Array.BYTES_PER_ELEMENT); |
14 | 22 | expect(views.index.length).toBe(1); |
| 23 | + expect(views.flag.byteOffset).toBe(alignTo(views.index.byteOffset + Uint32Array.BYTES_PER_ELEMENT, Uint8Array.BYTES_PER_ELEMENT)); |
15 | 24 | expect(views.flag.length).toBe(1); |
16 | | - expect(views.data.byteOffset).toBe(0); |
17 | | - expect(views.index.byteOffset).toBe(1024 * Float32Array.BYTES_PER_ELEMENT); |
18 | | - expect(views.flag.byteOffset).toBe(1024 * Float32Array.BYTES_PER_ELEMENT + Uint32Array.BYTES_PER_ELEMENT); |
| 25 | + expect(views.u32.byteOffset).toBe(alignTo(views.flag.byteOffset + Uint8Array.BYTES_PER_ELEMENT, Uint32Array.BYTES_PER_ELEMENT)); |
| 26 | + expect(views.u32.length).toBe(1); |
| 27 | + expect(views.u64.byteOffset).toBe(alignTo(views.u32.byteOffset + Uint32Array.BYTES_PER_ELEMENT, BigUint64Array.BYTES_PER_ELEMENT)); |
| 28 | + expect(views.u64.length).toBe(1); |
19 | 29 | }); |
20 | 30 |
|
21 | 31 | it('should create the correct TypedArray views with SharedArrayBuffer', () => { |
22 | 32 | const views = createArrayBufferViews(SharedArrayBuffer, { |
23 | | - buffer1: [Int16Array, 512], |
24 | | - buffer2: [Uint8Array, 256] |
| 33 | + data: [Float32Array, 1024], |
| 34 | + index: [Uint32Array, 1], |
| 35 | + flag: [Uint8Array, 1], |
| 36 | + u32: [Uint32Array, 1], |
| 37 | + u64: [BigUint64Array, 1], |
25 | 38 | }); |
26 | | - |
27 | | - expect(views.buffer1.length).toBe(512); |
28 | | - expect(views.buffer2.length).toBe(256); |
29 | | - expect(views.buffer1.byteOffset).toBe(0); |
30 | | - expect(views.buffer2.byteOffset).toBe(512 * Int16Array.BYTES_PER_ELEMENT); |
| 39 | + expect(views.data.byteOffset).toBe(0); |
| 40 | + expect(views.data.length).toBe(1024); |
| 41 | + expect(views.index.byteOffset).toBe(1024 * Float32Array.BYTES_PER_ELEMENT); |
| 42 | + expect(views.index.length).toBe(1); |
| 43 | + expect(views.flag.byteOffset).toBe(alignTo(views.index.byteOffset + Uint32Array.BYTES_PER_ELEMENT, Uint8Array.BYTES_PER_ELEMENT)); |
| 44 | + expect(views.flag.length).toBe(1); |
| 45 | + expect(views.u32.byteOffset).toBe(alignTo(views.flag.byteOffset + Uint8Array.BYTES_PER_ELEMENT, Uint32Array.BYTES_PER_ELEMENT)); |
| 46 | + expect(views.u32.length).toBe(1); |
| 47 | + expect(views.u64.byteOffset).toBe(alignTo(views.u32.byteOffset + Uint32Array.BYTES_PER_ELEMENT, BigUint64Array.BYTES_PER_ELEMENT)); |
| 48 | + expect(views.u64.length).toBe(1); |
31 | 49 | }); |
32 | 50 |
|
33 | 51 | it('should throw an error if the buffer size is insufficient', () => { |
|
0 commit comments