@@ -8,7 +8,7 @@ const { Worker } = require('worker_threads');
88// Verify that Workers don't care about --stack-size, as they have their own
99// fixed and known stack sizes.
1010
11- async function runWorker ( ) {
11+ async function runWorker ( options = { } ) {
1212 const empiricalStackDepth = new Uint32Array ( new SharedArrayBuffer ( 4 ) ) ;
1313 const worker = new Worker ( `
1414 const { workerData: { empiricalStackDepth } } = require('worker_threads');
@@ -18,26 +18,45 @@ async function runWorker() {
1818 }
1919 f();` , {
2020 eval : true ,
21- workerData : { empiricalStackDepth }
21+ workerData : { empiricalStackDepth } ,
22+ ...options
2223 } ) ;
2324
2425 const [ error ] = await once ( worker , 'error' ) ;
2526
26- common . expectsError ( {
27- constructor : RangeError ,
28- message : 'Maximum call stack size exceeded'
29- } ) ( error ) ;
27+ if ( ! options . skipErrorCheck ) {
28+ common . expectsError ( {
29+ constructor : RangeError ,
30+ message : 'Maximum call stack size exceeded'
31+ } ) ( error ) ;
32+ }
3033
3134 return empiricalStackDepth [ 0 ] ;
3235}
3336
3437( async function ( ) {
35- v8 . setFlagsFromString ( '--stack-size=500' ) ;
36- const w1stack = await runWorker ( ) ;
37- v8 . setFlagsFromString ( '--stack-size=1000' ) ;
38- const w2stack = await runWorker ( ) ;
39- // Make sure the two stack sizes are within 10 % of each other, i.e. not
40- // affected by the different `--stack-size` settings.
41- assert ( Math . max ( w1stack , w2stack ) / Math . min ( w1stack , w2stack ) < 1.1 ,
42- `w1stack = ${ w1stack } , w2stack ${ w2stack } are too far apart` ) ;
38+ {
39+ v8 . setFlagsFromString ( '--stack-size=500' ) ;
40+ const w1stack = await runWorker ( ) ;
41+ v8 . setFlagsFromString ( '--stack-size=1000' ) ;
42+ const w2stack = await runWorker ( ) ;
43+ // Make sure the two stack sizes are within 10 % of each other, i.e. not
44+ // affected by the different `--stack-size` settings.
45+ assert ( Math . max ( w1stack , w2stack ) / Math . min ( w1stack , w2stack ) < 1.1 ,
46+ `w1stack = ${ w1stack } , w2stack = ${ w2stack } are too far apart` ) ;
47+ }
48+
49+ {
50+ const w1stack = await runWorker ( { resourceLimits : { stackSizeMb : 0.5 } } ) ;
51+ const w2stack = await runWorker ( { resourceLimits : { stackSizeMb : 1.0 } } ) ;
52+ // Make sure the two stack sizes are at least 40 % apart from each other,
53+ // i.e. affected by the different `stackSizeMb` settings.
54+ assert ( w2stack > w1stack * 1.4 ,
55+ `w1stack = ${ w1stack } , w2stack = ${ w2stack } are too close` ) ;
56+ }
57+
58+ // Test that various low stack sizes result in an 'error' event.
59+ for ( const stackSizeMb of [ 0.001 , 0.01 , 0.1 , 0.2 , 0.3 , 0.5 ] ) {
60+ await runWorker ( { resourceLimits : { stackSizeMb } , skipErrorCheck : true } ) ;
61+ }
4362} ) ( ) . then ( common . mustCall ( ) ) ;
0 commit comments