@@ -105,68 +105,32 @@ describe('WorkerManager', () => {
105105 await workerManager . settled ( ) ;
106106 await workerManager . destroy ( ) ;
107107 } ) ;
108- // Test('zero-copy buffer transfer', async () => {
109- // workerManager = await WorkerManager.createWorkerManager(
110- // {
111- // workerFactory,
112- // cores: 1,
113- // logger,
114- // },
115- // );
116- // const buffer = await workerManager.call(async (w) => {
117- // // Start with a Node Buffer that is "pooled"
118- // const inputBuffer = Buffer.from('hello 1');
119- // // Slice copy out the ArrayBuffer
120- // const input = inputBuffer.buffer.slice(
121- // inputBuffer.byteOffset,
122- // inputBuffer.byteOffset + inputBuffer.byteLength,
123- // );
124- // // When the underlying ArrayBuffer is detached
125- // // this Buffer's byteLength will also become 0
126- // const inputBuffer_ = Buffer.from(input);
127- // expect(inputBuffer_.byteLength).toBe(input.byteLength);
128- // // Zero-copy transfer moves "ownership"
129- // // input is detached from main thread
130- // // output is detached from worker thread
131- // const output = await w.transferBuffer(Transfer(input));
132- // // Detached ArrayBuffers have byte lengths of 0
133- // expect(input.byteLength).toBe(0);
134- // expect(inputBuffer_.byteLength).toBe(0);
135- // // Zero-copy wrap to use Node Buffer API
136- // const outputBuffer = Buffer.from(output);
137- // return outputBuffer;
138- // });
139- // expect(buffer).toEqual(Buffer.from('hello 2'));
140- // await workerManager.destroy();
141- // });
142- // test('scratch', async () => {
143- // console.log('start');
144- // console.log(
145- // 'Hello from main',
146- // nodeWorkers.isMainThread,
147- // nodeWorkers.threadId,
148- // );
149- //
150- // const script = `
151- // const nodeWorkers = require("node:worker_threads");
152- // console.log("Hello from worker!: ", nodeWorkers.isMainThread, nodeWorkers.threadId);
153- // nodeWorkers.parentPort.on('message', v => {
154- // console.log('message', v);
155- // nodeWorkers.parentPort.postMessage(v);
156- // });
157- // `;
158- // await new Promise((resolve, reject) => {
159- // const worker = new nodeWorkers.Worker(script, { eval: true });
160- // worker.on('message', (v) => {
161- // logger.warn(`message: ${v}`);
162- // worker.terminate();
163- // });
164- // worker.on('error', reject);
165- // worker.on('exit', resolve);
166- // worker.postMessage('some message!');
167- // });
168- // console.log('stop');
169- // });
170- } ) ;
108+ test ( 'zero-copy buffer transfer' , async ( ) => {
109+ workerManager = await WorkerManager . createWorkerManager ( {
110+ workerFactory,
111+ cores : 1 ,
112+ logger,
113+ } ) ;
114+ // Creating a new buffer
115+ const inputBuffer = Buffer . from ( 'hello 1' ) ;
116+ // Extracting the underlying ArrayBuffer
117+ const input = inputBuffer . buffer . slice (
118+ inputBuffer . byteOffset ,
119+ inputBuffer . byteOffset + inputBuffer . byteLength ,
120+ ) ;
121+ // Making call with transfer
122+ const output = await workerManager . call ( {
123+ type : 'transferBuffer' ,
124+ data : input ,
125+ transferList : [ input ] ,
126+ } ) ;
127+ // The input ArrayBuffer is detached so the length is now 0
128+ expect ( input . byteLength ) . toBe ( 0 ) ;
129+ // The output should be filled with 0xF
130+ expect ( Buffer . from ( output as ArrayBuffer ) ) . toEqual (
131+ Buffer . alloc ( inputBuffer . byteLength , 0xf ) ,
132+ ) ;
171133
172- test ( 'asd' , async ( ) => { } ) ;
134+ await workerManager . destroy ( ) ;
135+ } ) ;
136+ } ) ;
0 commit comments