1- import type { WorkerFactory } from '#types.js' ;
1+ import type { WorkerFactory , WorkerResult } from '#types.js' ;
22import { Worker } from 'node:worker_threads' ;
33import url from 'url' ;
44import path from 'node:path' ;
@@ -19,7 +19,7 @@ describe('WorkerManager', () => {
1919 return new Worker ( path . join ( dirname , '../dist/worker.js' ) ) ;
2020 } ;
2121
22- let workerManager : WorkerManager ;
22+ let workerManager : WorkerManager < typeof workerManifest > ;
2323
2424 afterEach ( async ( ) => {
2525 await workerManager ?. destroy ( ) ;
@@ -28,12 +28,13 @@ describe('WorkerManager', () => {
2828 test ( 'async construction and async destroy' , async ( ) => {
2929 workerManager = await WorkerManager . createWorkerManager ( {
3030 workerFactory,
31+ manifest : workerManifest ,
3132 cores : 1 ,
3233 logger,
3334 } ) ;
3435 expect ( workerManager [ destroyed ] ) . toBe ( false ) ;
35- expect ( await workerManager . call ( { type : 'test' , data : undefined } ) ) . toBe (
36- 'hello world!' ,
36+ expect ( await workerManager . call ( { type : 'test' , data : undefined } ) ) . toEqual (
37+ { data : 'hello world!' } ,
3738 ) ;
3839 await workerManager . destroy ( ) ;
3940 expect ( workerManager [ destroyed ] ) . toBe ( true ) ;
@@ -45,6 +46,7 @@ describe('WorkerManager', () => {
4546 await expect (
4647 WorkerManager . createWorkerManager ( {
4748 workerFactory,
49+ manifest : workerManifest ,
4850 cores : 0 ,
4951 logger,
5052 } ) ,
@@ -53,11 +55,12 @@ describe('WorkerManager', () => {
5355 test ( 'start with 1 worker core' , async ( ) => {
5456 workerManager = await WorkerManager . createWorkerManager ( {
5557 workerFactory,
58+ manifest : workerManifest ,
5659 cores : 1 ,
5760 logger,
5861 } ) ;
59- expect ( await workerManager . call ( { type : 'test' , data : undefined } ) ) . toBe (
60- 'hello world!' ,
62+ expect ( await workerManager . call ( { type : 'test' , data : undefined } ) ) . toEqual (
63+ { data : 'hello world!' } ,
6164 ) ;
6265 await workerManager . destroy ( ) ;
6366 } ) ;
@@ -66,6 +69,7 @@ describe('WorkerManager', () => {
6669 // if you only use 1 core, this test will be much slower
6770 workerManager = await WorkerManager . createWorkerManager ( {
6871 workerFactory,
72+ manifest : workerManifest ,
6973 cores : 1 ,
7074 logger,
7175 } ) ;
@@ -77,16 +81,17 @@ describe('WorkerManager', () => {
7781 }
7882 const rs = await Promise . all ( tasks ) ;
7983 expect ( rs . length ) . toBe ( taskCount ) ;
80- expect ( rs . every ( ( x ) => x === undefined ) ) . toBe ( true ) ;
84+ expect ( rs . every ( ( x : WorkerResult ) => x . data === undefined ) ) . toBe ( true ) ;
8185 const r = await task ;
82- expect ( r ) . toBeUndefined ( ) ;
86+ expect ( r ) . toEqual ( { data : undefined } ) ;
8387 await workerManager . destroy ( ) ;
8488 } ) ;
8589 test ( 'queueing up tasks' , async ( ) => {
8690 // Use all possible cores
8791 // if you only use 1 core, this test will be much slower
8892 workerManager = await WorkerManager . createWorkerManager ( {
8993 workerFactory,
94+ manifest : workerManifest ,
9095 cores : 1 ,
9196 logger,
9297 } ) ;
@@ -95,10 +100,10 @@ describe('WorkerManager', () => {
95100 const t3 = workerManager . queue ( { type : 'sleep' , data : 500 } ) ;
96101 const t4 = workerManager . queue ( { type : 'sleep' , data : 500 } ) ;
97102 await workerManager . completed ( ) ;
98- expect ( await t1 ) . toBeUndefined ( ) ;
99- expect ( await t2 ) . toBeUndefined ( ) ;
100- expect ( await t3 ) . toBeUndefined ( ) ;
101- expect ( await t4 ) . toBeUndefined ( ) ;
103+ expect ( await t1 ) . toEqual ( { data : undefined } ) ;
104+ expect ( await t2 ) . toEqual ( { data : undefined } ) ;
105+ expect ( await t3 ) . toEqual ( { data : undefined } ) ;
106+ expect ( await t4 ) . toEqual ( { data : undefined } ) ;
102107 void workerManager . queue ( { type : 'sleep' , data : 500 } ) ;
103108 void workerManager . queue ( { type : 'sleep' , data : 500 } ) ;
104109 void workerManager . queue ( { type : 'sleep' , data : 500 } ) ;
@@ -109,6 +114,7 @@ describe('WorkerManager', () => {
109114 test ( 'zero-copy buffer transfer' , async ( ) => {
110115 workerManager = await WorkerManager . createWorkerManager ( {
111116 workerFactory,
117+ manifest : workerManifest ,
112118 cores : 1 ,
113119 logger,
114120 } ) ;
@@ -128,7 +134,7 @@ describe('WorkerManager', () => {
128134 // The input ArrayBuffer is detached so the length is now 0
129135 expect ( input . byteLength ) . toBe ( 0 ) ;
130136 // The output should be filled with 0xF
131- expect ( Buffer . from ( output as ArrayBuffer ) ) . toEqual (
137+ expect ( Buffer . from ( output . data as ArrayBuffer ) ) . toEqual (
132138 Buffer . alloc ( inputBuffer . byteLength , 0xf ) ,
133139 ) ;
134140
@@ -144,11 +150,23 @@ describe('WorkerManager', () => {
144150 manifest : workerManifest ,
145151 logger,
146152 } ) ;
153+ expect ( await workerManager . methods . test ( ) ) . toEqual ( {
154+ data : 'hello world!' ,
155+ } ) ;
156+ expect ( await workerManager . methods . add ( { a : 1 , b : 2 } ) ) . toEqual ( {
157+ data : 3 ,
158+ } ) ;
159+ expect ( await workerManager . methods . sub ( { a : 1 , b : 2 } ) ) . toEqual ( {
160+ data : - 1 ,
161+ } ) ;
162+ expect ( await workerManager . methods . fac ( 5 ) ) . toEqual ( { data : 120 } ) ;
163+ expect ( await workerManager . methods . sleep ( 10 ) ) . toEqual ( { data : undefined } ) ;
147164 const arrayBuffer = new ArrayBuffer ( 100 ) ;
148- const result = await workerManager . proxy . transferBuffer ( arrayBuffer , [
165+ const result = await workerManager . methods . transferBuffer ( arrayBuffer , [
149166 arrayBuffer ,
150167 ] ) ;
151- console . log ( result ) ;
168+ expect ( new Uint8Array ( result . data ) ) . toEqual ( new Uint8Array ( 100 ) . fill ( 0xf ) ) ;
169+
152170 await workerManager . destroy ( ) ;
153171 } ) ;
154172} ) ;
0 commit comments