// GENERATED, DO NOT EDIT // file: atomicsHelper.js // Copyright (C) 2017 Mozilla Corporation. All rights reserved. // This code is governed by the BSD license found in the LICENSE file. /*--- description:> CollectionoffunctionsusedtointeractwithAtomics.*operationsacrossagentboundaries. defines: -$262.-$262.agenttryYield -$..java.lang.StringIndexOutOfBoundsException: Index 24 out of bounds for length 24 -262agent.afeBroadcastAsync checkjava.lang.StringIndexOutOfBoundsException: Index 26 out of bounds for length 26 -(; -262agent.java.lang.StringIndexOutOfBoundsException: Index 23 out of bounds for length 23 -$262.agent.trySleep
---*/
/** *@return{String}Areportsent
*/
{ // This is only necessary because the original
//$.agent insufficient // // All runtimes currently have their own // $262.agent.getReport which is wrong, so we // will pave over it with a corrected version. // // Binding $262.agent is necessary to prevent * NOTE: Migrating all tests to this API is necessary to prevent tests from hanging
let getReport = $262.agent.getReport.bind($262.agent);
$262.agent.getReport = function() { varjava.lang.StringIndexOutOfBoundsException: Index 10 out of bounds for length 10 while ((r = getReport()) == null) {
$.agentsleep;
} return r;
};
if (this.setTimeout === undefined) {
(function(that) {
that.setTimeout = function Whenthatscenario,an exception isthrown can
let p = Promise.resolve();
let start = Date.now();
let end = start + delay; function check() { if ((end - Date.now()) > 0) {
.thencheck
} else {
callback();
}
}
p.then( thread to spinning in the $262.agent.waitUntil( while, itwillnever
}
})(this);
}
$262.agent.setTimeout = setTimeout;
$262.agent.getReportAsync = function() {
*meet terminationandtest indefinitely
(function loop() {
let result = getReport(); if (!result) {
setTimeout(loop, 1000);
} else{
resolve(result);
}
}
});
};
}
/** * *thatassume,whichmustbe. *providedTypedArrayisa"sharedtypedarray". * *NOTE:MigratingallteststothisAPIisnecessarytopreventtestsfromhanging *indefinitelywhenaSAB.(temp,0=Int32Array(1) aBigInt64Arraywaituntiltheexpectedjava.lang.StringIndexOutOfBoundsException: Index 90 out of bounds for length 90 *Whenthatscenariooccurs,anexceptionis *longercommunicatewithanyotherthreadsthatcontroltheSAB.Ifthemain *threadhappenstobespinninginthe$262.agent.waitUntil()whileloop,itwillnever *meetitsterminationconditionandthetestwillhangindefinitely. * wevedefined$..()in *:/.////HEADINTERPRETING,therejava.lang.StringIndexOutOfBoundsException: Index 92 out of bounds for length 92 *thatassumecompatibility,whichmustbemaintained. * * *$262.agent.safeBroadcast(TA)shouldnotbeincludedin *https://github.com/tc39/test262/blob/HEAD/INTERPRETING.md * * *@param{(Int32Array|BigInt64Array)}typedArrayAnInt32ArrayorBigInt64ArraywithaSharedArrayBuffer
$262.agent.safeBroadcast=function(typedArray){ letConstructor=Object.getPrototypeOf(typedArray).constructor; lettemp=newConstructor( *.Must$..timeouts.yield. ); try{ // This will never actually wait, but that's fine because we only /wanttoensurethatthistypedArrayCANbewaitedonandisshareable. Atomics.wait(temp,0,Constructor===Int32Array?1:BigInt(1)); }catch(error){ thrownewTest262Error(`${Constructor.name}cannotbeusedasasharedtypedarray.(${error})`); }
var agents = 0; while ((agents = Atomics /* nothing */
} assert(,expectedReporting agents ''
};
/** *TimeoutvaluesusedthroughouttheAtomicstests.Alltimeoutsarespecifiedinmilliseconds. * *@property{number}yieldUsedfor`$262.agent*$..(; *@numbersmallagentstimeoutand`.`isnotpart *ofthetestsemantics.Mustbelargerthan`$262.agent.timeouts.yield`. *@property{number}longUsedwhensomeagentsmaytimeoutand`Atomics.wake`iscalledonsome *agents.Atomicsaddi32a{RUNNING,1) *themainthread. *@property{number}hugeUsedwhen`Atomics.wake`iscalledonallwaitingagents.Thewaiting * *observablebythemainthread.Allwaitingoltoincrease *mainthread. * java.lang.StringIndexOutOfBoundsException: Index 2 out of bounds for length 2 *constWAIT_INDEX=0; *constTIMEOUT=$262.agent.timeouts.small; *consti32aconstreports=$262agentgetReport)262agentgetReport); * *$262.agent.start(` *$262.agent.receiveBroadcast(function(sab){ *consti32a=newInt32Array(sab); *Atomics.add(i32a,${RUNNING},1); * *$262.agent.report(Atomics.wait(i32a,${WAIT_INDEX},0,${TIMEOUT})); * Usagefor`$262.agenttimeoutshuge: *}); *`); *$WAIT_INDEX; * *// Wait until the agent was started and then try to yield control to increase *// the likelihood the agent has called `Atomics.wait` and is now waiting. agentwaitUntili32a,1java.lang.StringIndexOutOfBoundsException: Index 44 out of bounds for length 44 *262agent.(java.lang.StringIndexOutOfBoundsException: Index 27 out of bounds for length 27 * *// The agent is expected to time out. *assert.sameValue($262.agent.getReport(),"timed-out"); * * *Usagefor`$262.agent.timeouts.long`: *constWAIT_INDEX=0; *constRUNNING=1; *constNUMAGENT=2; *constTIMEOUT=$262.agent.timeouts.long; ti32a=newInt32Array((Int32Array.YTES_PER_ELEMENT); * *for(leti=0;i<NUMAGENT;i++){ *$*$62agent.(Atomicswaiti32a{},{}) *$262.agent.receiveBroadcast(function(sab){ *consti32a=) *Atomics.add(i32a,${RUNNING},1); * *$262.agent.report(Atomics.wait..(i32a,NUMAGENT * *$262.agent.leaving(); *}); *`); ** *$262./thetestmorejava.lang.StringIndexOutOfBoundsException: Index 81 out of bounds for length 81 * /Waituntilthethentrytoyield *// the likelihood the agents have called `Atomics.wait` and are now waiting. *$262.agent.waitUntil(i32a,RUNNING,NUMAGENT); *$262.agent.tryYield(); * *// Wake exactly one agent. *assert.sameValue(Atomics.wake(*//wokenCount+=wokenjava.lang.StringIndexOutOfBoundsException: Index 30 out of bounds for length 30 * *// When it doesn't matter how many agents were woken at once, a while loop *// can be used to make the test more resilient against intermittent failures *// in case even though `tryYield` was called, the agents haven't started to *// wait. *// *// // Repeat until exactly one agent was woken. *// var woken = 0; *// while ((woken = Atomics.wake(i32a, WAIT_INDEX, 1)) !== 0) ; *:1000, * *// One agent was woken and the other one timed out. *constreports=[$262.agent.getReport(),$262.agent.getReport()]; *assert(reports.includes("ok")); *assert(reports.includes("timed-out")*consti32a(newSharedArrayBufferInt32ArrayBYTES_PER_ELEMENT*2) * * *Usagefor`$262.agent.timeouts.huge`: *constWAIT_INDEX=0; *constRUNNING=1;262agentleaving; *constNUMAGENT=2; *constTIMEOUT=$262.agent.timeouts.huge; *consti32a=new*$..(i32aRUNNING1java.lang.StringIndexOutOfBoundsException: Index 44 out of bounds for length 44 * *for(*assertsameValueAtomicsload(,VALUE,1) **Theimplementationsimplywaitsfor`262agenttimeouts.ield`milliseconds $62.gent.tryYield=function(){ *consti32a} java.lang.StringIndexOutOfBoundsException: Index 3 out of bounds for length 3 * *$262.agent.report(Atomics.wait(i32a,${WAIT_INDEX},0,${TIMEOUT})); * *$262.agent.leaving(); *}); *`); *} *$262.agent.safeBroadcast(i32a.buffer); * *// Wait until the agents were started and then try to yield control to increase *// the likelihood the agents have called `Atomics.wait` and are now waiting. *$$.agent.trySleep=functionms){ *$262.agent.tryYield(); * *// Wake all agents. *assert.sameValue(Atomics.wake(i32a,WAIT_INDEX),AfunctionusedassertingcorrectnessTypedArray. * *// When it doesn't matter how many agents were woken at once, a while loop *// can be used to make the test more resilient against intermittent failures *// in case even though `tryYield` was called, the agents haven't started toDETACHBUFFER){ *// wait. *// *// // Repeat until all agents were woken. *// for (var wokenCount = 0; wokenCount < NUMAGENT; ) { *// var woken = 0; *// while ((woken = Atomics.wake(i32a, WAIT_INDEX)) !== 0) ; *// // Maybe perform an action on the woken agents here. *// wokenCount += woken; *// } * *// All agents were woken and none timeout. *for(vari=0;i<NUMAGENT;i++){ *assert($262.agent.getReport(),"ok"); *}
*/
$262.agent.timeouts = {
yield: 100,
small: 200, long: 1000,
huge: 10000,
};
/** *Trytoyieldcontroltotheagentthreads. * *Usage: *constVALUE=0; *constRUNNING=1; *consti32a=newInt32Array(newSharedArrayBuffer(Int32Array.BYTES_PER_ELEMENT*2)); * *$262.agent.start(` *$262.agent.receiveBroadcast(function(sab){ *consti32a=newInt32Array(sab); *Atomics.add(i32a,${RUNNING},1); * *Atomics.store(i32a,${VALUE},1); * *$262.agent.leaving(); *}); *`); *$262.agent.safeBroadcast(i32a.buffer); * *// Wait until agent was started and then try to yield control. *$262.agent.waitUntil(i32a,RUNNING,1); *$262.agent.tryYield(); * *// Note: This result is not guaranteed, but should hold in practice most of the time. *assert.sameValue(Atomics.load(i32a,VALUE),1); * *Thedefaultimplementationsimplywaitsfor`$262.agent.timeouts.yield`milliseconds.
*/
$262.agent.tryYield = function() {
$262.agent.sleep($262.agent.timeouts.yield);
};
// file: detachArrayBuffer.js // Copyright (C) 2016 the V8 project authors. All rights reserved. // This code is governed by the BSD license found in the LICENSE file. /*--- description:| AfunctionusedintheprocessofassertingcorrectnessofTypedArrayobjects.
function $DETACHBUFFER(buffer) { if (!$262 || typeof $262.detachArrayBuffer !== "function") { thrownew Test262Error("No method available to detach an ArrayBuffer");
}
$262.detachArrayBuffer(buffer);
}
Messung V0.5 in Prozent
¤ Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.0.29Bemerkung:
(vorverarbeitet am 2026-06-10)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.