MCPcopy Index your code
hub / github.com/ChartGPU/ChartGPU / createFakeDevice

Function createFakeDevice

examples/acceptance/data-store-append.ts:20–69  ·  view source on GitHub ↗

* Minimal fake GPUDevice for Node.js acceptance tests. * Implements only the subset of GPUDevice needed for createDataStore.

()

Source from the content-addressed store, hash-verified

18 * Implements only the subset of GPUDevice needed for createDataStore.
19 */
20function createFakeDevice(): GPUDevice {
21 const buffers = new Map<GPUBuffer, { size: number; data: ArrayBuffer }>();
22
23 // Expose WebGPU constants needed by createDataStore
24 const GPUBufferUsage = {
25 VERTEX: 0x20,
26 COPY_DST: 0x08,
27 };
28
29 const device: GPUDevice = {
30 limits: {
31 maxBufferSize: 1024 * 1024 * 1024, // 1GB
32 },
33 createBuffer: (descriptor: GPUBufferDescriptor): GPUBuffer => {
34 const size = descriptor.size ?? 0;
35 const data = new ArrayBuffer(size);
36 const buffer = {
37 destroy: () => {
38 buffers.delete(buffer as GPUBuffer);
39 },
40 } as GPUBuffer;
41 buffers.set(buffer as GPUBuffer, { size, data });
42 return buffer;
43 },
44 queue: {
45 writeBuffer: (buffer: GPUBuffer, bufferOffset: number, data: ArrayBuffer | ArrayBufferView, dataOffset?: number, size?: number): void => {
46 const entry = buffers.get(buffer);
47 if (!entry) throw new Error('Buffer not found');
48
49 const source = data instanceof ArrayBuffer ? new Uint8Array(data) : new Uint8Array(data.buffer, data.byteOffset, data.byteLength);
50 const target = new Uint8Array(entry.data);
51 const actualSize = size ?? source.length;
52 const actualDataOffset = dataOffset ?? 0;
53
54 if (bufferOffset + actualSize > entry.size) {
55 throw new Error(`writeBuffer: offset ${bufferOffset} + size ${actualSize} exceeds buffer size ${entry.size}`);
56 }
57
58 for (let i = 0; i < actualSize; i++) {
59 target[bufferOffset + i] = source[actualDataOffset + i]!;
60 }
61 },
62 },
63 } as GPUDevice;
64
65 // Inject GPUBufferUsage into global scope for createDataStore to access
66 (globalThis as unknown as { GPUBufferUsage: typeof GPUBufferUsage }).GPUBufferUsage = GPUBufferUsage;
67
68 return device;
69}
70
71// Fast path: append without reallocation
72{

Callers 1

Calls

no outgoing calls

Tested by

no test coverage detected