1
- import type { WorkerFactory } from '#types.js' ;
1
+ import type { WorkerFactory , WorkerResult } from '#types.js' ;
2
2
import { Worker } from 'node:worker_threads' ;
3
3
import url from 'url' ;
4
4
import path from 'node:path' ;
@@ -19,7 +19,7 @@ describe('WorkerManager', () => {
19
19
return new Worker ( path . join ( dirname , '../dist/worker.js' ) ) ;
20
20
} ;
21
21
22
- let workerManager : WorkerManager ;
22
+ let workerManager : WorkerManager < typeof workerManifest > ;
23
23
24
24
afterEach ( async ( ) => {
25
25
await workerManager ?. destroy ( ) ;
@@ -28,12 +28,13 @@ describe('WorkerManager', () => {
28
28
test ( 'async construction and async destroy' , async ( ) => {
29
29
workerManager = await WorkerManager . createWorkerManager ( {
30
30
workerFactory,
31
+ manifest : workerManifest ,
31
32
cores : 1 ,
32
33
logger,
33
34
} ) ;
34
35
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!' } ,
37
38
) ;
38
39
await workerManager . destroy ( ) ;
39
40
expect ( workerManager [ destroyed ] ) . toBe ( true ) ;
@@ -45,6 +46,7 @@ describe('WorkerManager', () => {
45
46
await expect (
46
47
WorkerManager . createWorkerManager ( {
47
48
workerFactory,
49
+ manifest : workerManifest ,
48
50
cores : 0 ,
49
51
logger,
50
52
} ) ,
@@ -53,11 +55,12 @@ describe('WorkerManager', () => {
53
55
test ( 'start with 1 worker core' , async ( ) => {
54
56
workerManager = await WorkerManager . createWorkerManager ( {
55
57
workerFactory,
58
+ manifest : workerManifest ,
56
59
cores : 1 ,
57
60
logger,
58
61
} ) ;
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!' } ,
61
64
) ;
62
65
await workerManager . destroy ( ) ;
63
66
} ) ;
@@ -66,6 +69,7 @@ describe('WorkerManager', () => {
66
69
// if you only use 1 core, this test will be much slower
67
70
workerManager = await WorkerManager . createWorkerManager ( {
68
71
workerFactory,
72
+ manifest : workerManifest ,
69
73
cores : 1 ,
70
74
logger,
71
75
} ) ;
@@ -77,16 +81,17 @@ describe('WorkerManager', () => {
77
81
}
78
82
const rs = await Promise . all ( tasks ) ;
79
83
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 ) ;
81
85
const r = await task ;
82
- expect ( r ) . toBeUndefined ( ) ;
86
+ expect ( r ) . toEqual ( { data : undefined } ) ;
83
87
await workerManager . destroy ( ) ;
84
88
} ) ;
85
89
test ( 'queueing up tasks' , async ( ) => {
86
90
// Use all possible cores
87
91
// if you only use 1 core, this test will be much slower
88
92
workerManager = await WorkerManager . createWorkerManager ( {
89
93
workerFactory,
94
+ manifest : workerManifest ,
90
95
cores : 1 ,
91
96
logger,
92
97
} ) ;
@@ -95,10 +100,10 @@ describe('WorkerManager', () => {
95
100
const t3 = workerManager . queue ( { type : 'sleep' , data : 500 } ) ;
96
101
const t4 = workerManager . queue ( { type : 'sleep' , data : 500 } ) ;
97
102
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 } ) ;
102
107
void workerManager . queue ( { type : 'sleep' , data : 500 } ) ;
103
108
void workerManager . queue ( { type : 'sleep' , data : 500 } ) ;
104
109
void workerManager . queue ( { type : 'sleep' , data : 500 } ) ;
@@ -109,6 +114,7 @@ describe('WorkerManager', () => {
109
114
test ( 'zero-copy buffer transfer' , async ( ) => {
110
115
workerManager = await WorkerManager . createWorkerManager ( {
111
116
workerFactory,
117
+ manifest : workerManifest ,
112
118
cores : 1 ,
113
119
logger,
114
120
} ) ;
@@ -128,7 +134,7 @@ describe('WorkerManager', () => {
128
134
// The input ArrayBuffer is detached so the length is now 0
129
135
expect ( input . byteLength ) . toBe ( 0 ) ;
130
136
// The output should be filled with 0xF
131
- expect ( Buffer . from ( output as ArrayBuffer ) ) . toEqual (
137
+ expect ( Buffer . from ( output . data as ArrayBuffer ) ) . toEqual (
132
138
Buffer . alloc ( inputBuffer . byteLength , 0xf ) ,
133
139
) ;
134
140
@@ -144,11 +150,23 @@ describe('WorkerManager', () => {
144
150
manifest : workerManifest ,
145
151
logger,
146
152
} ) ;
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 } ) ;
147
164
const arrayBuffer = new ArrayBuffer ( 100 ) ;
148
- const result = await workerManager . proxy . transferBuffer ( arrayBuffer , [
165
+ const result = await workerManager . methods . transferBuffer ( arrayBuffer , [
149
166
arrayBuffer ,
150
167
] ) ;
151
- console . log ( result ) ;
168
+ expect ( new Uint8Array ( result . data ) ) . toEqual ( new Uint8Array ( 100 ) . fill ( 0xf ) ) ;
169
+
152
170
await workerManager . destroy ( ) ;
153
171
} ) ;
154
172
} ) ;
0 commit comments