%PDF- <> %âãÏÓ endobj 2 0 obj <> endobj 3 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/Annots[ 28 0 R 29 0 R] /MediaBox[ 0 0 595.5 842.25] /Contents 4 0 R/Group<>/Tabs/S>> endobj ºaâÚÎΞ-ÌE1ÍØÄ÷{òò2ÿ ÛÖ^ÔÀá TÎ{¦?§®¥kuµùÕ5sLOšuY>endobj 2 0 obj<>endobj 2 0 obj<>endobj 2 0 obj<>endobj 2 0 obj<> endobj 2 0 obj<>endobj 2 0 obj<>es 3 0 R>> endobj 2 0 obj<> ox[ 0.000000 0.000000 609.600000 935.600000]/Fi endobj 3 0 obj<> endobj 7 1 obj<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI]>>/Subtype/Form>> stream
'use strict'; require('../common'); const assert = require('assert'); const child_process = require('child_process'); const { Worker } = require('worker_threads'); if (process.argv[2] === 'child') { const i32arr = new Int32Array(new SharedArrayBuffer(8)); assert.strictEqual(Atomics.wait(i32arr, 0, 1), 'not-equal'); assert.strictEqual(Atomics.wait(i32arr, 0, 0, 10), 'timed-out'); new Worker(` const i32arr = require('worker_threads').workerData; Atomics.store(i32arr, 1, -1); Atomics.notify(i32arr, 1); Atomics.wait(i32arr, 1, -1); `, { eval: true, workerData: i32arr }); Atomics.wait(i32arr, 1, 0); assert.strictEqual(Atomics.load(i32arr, 1), -1); Atomics.store(i32arr, 1, 0); Atomics.notify(i32arr, 1); return; } const proc = child_process.spawnSync( process.execPath, [ '--trace-atomics-wait', __filename, 'child' ], { encoding: 'utf8', stdio: [ 'inherit', 'inherit', 'pipe' ] }); if (proc.status !== 0) console.log(proc); assert.strictEqual(proc.status, 0); const SABAddress = proc.stderr.match(/Atomics\.wait\((?<SAB>.+) \+/).groups.SAB; const actualTimeline = proc.stderr .replace(new RegExp(SABAddress, 'g'), '<address>') .replace(new RegExp(`\\(node:${proc.pid}\\) `, 'g'), '') .replace(/\binf(inity)?\b/gi, 'inf') .replace(/\r/g, '') .trim(); console.log('+++ normalized stdout +++'); console.log(actualTimeline); console.log('--- normalized stdout ---'); const begin = `[Thread 0] Atomics.wait(<address> + 0, 1, inf) started [Thread 0] Atomics.wait(<address> + 0, 1, inf) did not wait because the \ values mismatched [Thread 0] Atomics.wait(<address> + 0, 0, 10) started [Thread 0] Atomics.wait(<address> + 0, 0, 10) timed out`; const expectedTimelines = [ `${begin} [Thread 0] Atomics.wait(<address> + 4, 0, inf) started [Thread 1] Atomics.wait(<address> + 4, -1, inf) started [Thread 0] Atomics.wait(<address> + 4, 0, inf) was woken up by another thread [Thread 1] Atomics.wait(<address> + 4, -1, inf) was woken up by another thread`, `${begin} [Thread 1] Atomics.wait(<address> + 4, 0, inf) started [Thread 0] Atomics.wait(<address> + 4, -1, inf) started [Thread 0] Atomics.wait(<address> + 4, 0, inf) was woken up by another thread [Thread 1] Atomics.wait(<address> + 4, -1, inf) was woken up by another thread`, `${begin} [Thread 0] Atomics.wait(<address> + 4, 0, inf) started [Thread 0] Atomics.wait(<address> + 4, 0, inf) was woken up by another thread [Thread 1] Atomics.wait(<address> + 4, -1, inf) started [Thread 1] Atomics.wait(<address> + 4, -1, inf) was woken up by another thread`, `${begin} [Thread 0] Atomics.wait(<address> + 4, 0, inf) started [Thread 0] Atomics.wait(<address> + 4, 0, inf) was woken up by another thread [Thread 1] Atomics.wait(<address> + 4, -1, inf) started [Thread 1] Atomics.wait(<address> + 4, -1, inf) did not wait because the \ values mismatched`, `${begin} [Thread 0] Atomics.wait(<address> + 4, 0, inf) started [Thread 1] Atomics.wait(<address> + 4, -1, inf) started [Thread 0] Atomics.wait(<address> + 4, 0, inf) was woken up by another thread [Thread 1] Atomics.wait(<address> + 4, -1, inf) did not wait because the \ values mismatched`, `${begin} [Thread 1] Atomics.wait(<address> + 4, 0, inf) started [Thread 0] Atomics.wait(<address> + 4, -1, inf) started [Thread 0] Atomics.wait(<address> + 4, 0, inf) was woken up by another thread [Thread 1] Atomics.wait(<address> + 4, -1, inf) did not wait because the \ values mismatched`, `${begin} [Thread 0] Atomics.wait(<address> + 4, 0, inf) started [Thread 0] Atomics.wait(<address> + 4, 0, inf) did not wait because the \ values mismatched [Thread 1] Atomics.wait(<address> + 4, -1, inf) started [Thread 1] Atomics.wait(<address> + 4, -1, inf) did not wait because the \ values mismatched`, `${begin} [Thread 1] Atomics.wait(<address> + 4, -1, inf) started [Thread 0] Atomics.wait(<address> + 4, 0, inf) started [Thread 0] Atomics.wait(<address> + 4, 0, inf) did not wait because the \ values mismatched [Thread 1] Atomics.wait(<address> + 4, -1, inf) was woken up by another thread`, ]; assert(expectedTimelines.includes(actualTimeline));