mirror of
https://github.com/tc39/test262.git
synced 2025-05-03 22:40:28 +02:00
* [javascriptcore-test262-automation] changes from git@github.com:WebKit/webkit.git at sha 949e26452cfa153a7f4afe593da97e2fe9e1b706 on Tue Jul 03 2018 14:35:15 GMT-0400 (Eastern Daylight Time)
217 lines
9.2 KiB
JavaScript
217 lines
9.2 KiB
JavaScript
function opaqueDivBy2(a)
|
||
{
|
||
return a / 2;
|
||
}
|
||
noInline(opaqueDivBy2);
|
||
|
||
function opaqueDivBy3(a)
|
||
{
|
||
return a / 3;
|
||
}
|
||
noInline(opaqueDivBy3);
|
||
|
||
function opaqueDivBy4(a)
|
||
{
|
||
return a / 4;
|
||
}
|
||
noInline(opaqueDivBy4);
|
||
|
||
function opaqueDivBySafeMaxMinusOne(a)
|
||
{
|
||
// 2^1022
|
||
return a / 44942328371557897693232629769725618340449424473557664318357520289433168951375240783177119330601884005280028469967848339414697442203604155623211857659868531094441973356216371319075554900311523529863270738021251442209537670585615720368478277635206809290837627671146574559986811484619929076208839082406056034304;
|
||
}
|
||
noInline(opaqueDivBySafeMaxMinusOne);
|
||
|
||
function opaqueDivBySafeMax(a)
|
||
{
|
||
// 2^1023
|
||
return a / 89884656743115795386465259539451236680898848947115328636715040578866337902750481566354238661203768010560056939935696678829394884407208311246423715319737062188883946712432742638151109800623047059726541476042502884419075341171231440736956555270413618581675255342293149119973622969239858152417678164812112068608;
|
||
}
|
||
noInline(opaqueDivBySafeMax);
|
||
|
||
function opaqueDivBySafeMaxPlusOne(a)
|
||
{
|
||
// 2^1024
|
||
return a / 179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216;
|
||
}
|
||
noInline(opaqueDivBySafeMaxPlusOne);
|
||
|
||
function opaqueDivBySafeMin(a)
|
||
{
|
||
// 2^-1022
|
||
return a / (1 / 44942328371557897693232629769725618340449424473557664318357520289433168951375240783177119330601884005280028469967848339414697442203604155623211857659868531094441973356216371319075554900311523529863270738021251442209537670585615720368478277635206809290837627671146574559986811484619929076208839082406056034304);
|
||
}
|
||
noInline(opaqueDivBySafeMin);
|
||
|
||
function opaqueDivBySafeMinMinusOne(a)
|
||
{
|
||
// 2^-1023
|
||
return a / (1 / 89884656743115795386465259539451236680898848947115328636715040578866337902750481566354238661203768010560056939935696678829394884407208311246423715319737062188883946712432742638151109800623047059726541476042502884419075341171231440736956555270413618581675255342293149119973622969239858152417678164812112068608);
|
||
}
|
||
noInline(opaqueDivBySafeMinMinusOne);
|
||
|
||
|
||
for (let i = 0; i < 1e4; ++i) {
|
||
let result = opaqueDivBy2(Math.PI);
|
||
if (result !== 1.5707963267948966)
|
||
throw "Failed opaqueDivBy2(Math.PI). Result = " + result;
|
||
result = opaqueDivBy2(NaN);
|
||
if (result === result)
|
||
throw "Failed opaqueDivBy2(NaN). Result = " + result;
|
||
result = opaqueDivBy2(Infinity);
|
||
if (result !== Infinity)
|
||
throw "Failed opaqueDivBy2(Infinity). Result = " + result;
|
||
result = opaqueDivBy2(-Infinity);
|
||
if (result !== -Infinity)
|
||
throw "Failed opaqueDivBy2(-Infinity). Result = " + result;
|
||
result = opaqueDivBy2(Math.E);
|
||
if (result !== 1.3591409142295225)
|
||
throw "Failed opaqueDivBy2(Math.E). Result = " + result;
|
||
|
||
result = opaqueDivBy3(Math.PI);
|
||
if (result !== 1.0471975511965976)
|
||
throw "Failed opaqueDivBy3(Math.PI). Result = " + result;
|
||
result = opaqueDivBy3(NaN);
|
||
if (result === result)
|
||
throw "Failed opaqueDivBy3(NaN). Result = " + result;
|
||
result = opaqueDivBy3(Infinity);
|
||
if (result !== Infinity)
|
||
throw "Failed opaqueDivBy3(Infinity). Result = " + result;
|
||
result = opaqueDivBy3(-Infinity);
|
||
if (result !== -Infinity)
|
||
throw "Failed opaqueDivBy3(-Infinity). Result = " + result;
|
||
result = opaqueDivBy3(Math.E);
|
||
if (result !== 0.9060939428196817)
|
||
throw "Failed opaqueDivBy3(Math.E). Result = " + result;
|
||
|
||
result = opaqueDivBy4(Math.PI);
|
||
if (result !== 0.7853981633974483)
|
||
throw "Failed opaqueDivBy4(Math.PI). Result = " + result;
|
||
result = opaqueDivBy4(NaN);
|
||
if (result === result)
|
||
throw "Failed opaqueDivBy4(NaN). Result = " + result;
|
||
result = opaqueDivBy4(Infinity);
|
||
if (result !== Infinity)
|
||
throw "Failed opaqueDivBy4(Infinity). Result = " + result;
|
||
result = opaqueDivBy4(-Infinity);
|
||
if (result !== -Infinity)
|
||
throw "Failed opaqueDivBy4(-Infinity). Result = " + result;
|
||
result = opaqueDivBy4(Math.E);
|
||
if (result !== 0.6795704571147613)
|
||
throw "Failed opaqueDivBy4(Math.E). Result = " + result;
|
||
|
||
result = opaqueDivBySafeMaxMinusOne(Math.PI);
|
||
if (result !== 6.990275687580919e-308)
|
||
throw "Failed opaqueDivBySafeMaxMinusOne(Math.PI). Result = " + result;
|
||
result = opaqueDivBySafeMaxMinusOne(NaN);
|
||
if (result === result)
|
||
throw "Failed opaqueDivBySafeMaxMinusOne(NaN). Result = " + result;
|
||
result = opaqueDivBySafeMaxMinusOne(Infinity);
|
||
if (result !== Infinity)
|
||
throw "Failed opaqueDivBySafeMaxMinusOne(Infinity). Result = " + result;
|
||
result = opaqueDivBySafeMaxMinusOne(-Infinity);
|
||
if (result !== -Infinity)
|
||
throw "Failed opaqueDivBySafeMaxMinusOne(-Infinity). Result = " + result;
|
||
result = opaqueDivBySafeMaxMinusOne(Math.E);
|
||
if (result !== 6.048377836559378e-308)
|
||
throw "Failed opaqueDivBySafeMaxMinusOne(Math.E). Result = " + result;
|
||
|
||
result = opaqueDivBySafeMax(Math.PI);
|
||
if (result !== 3.4951378437904593e-308)
|
||
throw "Failed opaqueDivBySafeMax(Math.PI). Result = " + result;
|
||
result = opaqueDivBySafeMax(NaN);
|
||
if (result === result)
|
||
throw "Failed opaqueDivBySafeMax(NaN). Result = " + result;
|
||
result = opaqueDivBySafeMax(Infinity);
|
||
if (result !== Infinity)
|
||
throw "Failed opaqueDivBySafeMax(Infinity). Result = " + result;
|
||
result = opaqueDivBySafeMax(-Infinity);
|
||
if (result !== -Infinity)
|
||
throw "Failed opaqueDivBySafeMax(-Infinity). Result = " + result;
|
||
result = opaqueDivBySafeMax(Math.E);
|
||
if (result !== 3.024188918279689e-308)
|
||
throw "Failed opaqueDivBySafeMax(Math.E). Result = " + result;
|
||
|
||
result = opaqueDivBySafeMaxPlusOne(Math.PI);
|
||
if (result !== 0)
|
||
throw "Failed opaqueDivBySafeMaxPlusOne(Math.PI). Result = " + result;
|
||
result = opaqueDivBySafeMaxPlusOne(NaN);
|
||
if (result === result)
|
||
throw "Failed opaqueDivBySafeMaxPlusOne(NaN). Result = " + result;
|
||
result = opaqueDivBySafeMaxPlusOne(Infinity);
|
||
if (result === result)
|
||
throw "Failed opaqueDivBySafeMaxPlusOne(Infinity). Result = " + result;
|
||
result = opaqueDivBySafeMaxPlusOne(-Infinity);
|
||
if (result === result)
|
||
throw "Failed opaqueDivBySafeMaxPlusOne(-Infinity). Result = " + result;
|
||
result = opaqueDivBySafeMaxPlusOne(Math.E);
|
||
if (result !== 0)
|
||
throw "Failed opaqueDivBySafeMaxPlusOne(Math.E). Result = " + result;
|
||
|
||
result = opaqueDivBySafeMin(Math.PI);
|
||
if (result !== 1.4119048864730642e+308)
|
||
throw "Failed opaqueDivBySafeMin(Math.PI). Result = " + result;
|
||
result = opaqueDivBySafeMin(NaN);
|
||
if (result === result)
|
||
throw "Failed opaqueDivBySafeMin(NaN). Result = " + result;
|
||
result = opaqueDivBySafeMin(Infinity);
|
||
if (result !== Infinity)
|
||
throw "Failed opaqueDivBySafeMin(Infinity). Result = " + result;
|
||
result = opaqueDivBySafeMin(-Infinity);
|
||
if (result !== -Infinity)
|
||
throw "Failed opaqueDivBySafeMin(-Infinity). Result = " + result;
|
||
result = opaqueDivBySafeMin(Math.E);
|
||
if (result !== 1.2216591454104522e+308)
|
||
throw "Failed opaqueDivBySafeMin(Math.E). Result = " + result;
|
||
|
||
result = opaqueDivBySafeMinMinusOne(Math.PI);
|
||
if (result !== Infinity)
|
||
throw "Failed opaqueDivBySafeMinMinusOne(Math.PI). Result = " + result;
|
||
result = opaqueDivBySafeMinMinusOne(NaN);
|
||
if (result === result)
|
||
throw "Failed opaqueDivBySafeMinMinusOne(NaN). Result = " + result;
|
||
result = opaqueDivBySafeMinMinusOne(Infinity);
|
||
if (result !== Infinity)
|
||
throw "Failed opaqueDivBySafeMinMinusOne(Infinity). Result = " + result;
|
||
result = opaqueDivBySafeMinMinusOne(-Infinity);
|
||
if (result !== -Infinity)
|
||
throw "Failed opaqueDivBySafeMinMinusOne(-Infinity). Result = " + result;
|
||
result = opaqueDivBySafeMinMinusOne(Math.E);
|
||
if (result !== Infinity)
|
||
throw "Failed opaqueDivBySafeMinMinusOne(Math.E). Result = " + result;
|
||
}
|
||
|
||
|
||
// Check that we don't do anything crazy with crazy types.
|
||
for (let i = 0; i < 1e3; ++i) {
|
||
let result = opaqueDivBy2();
|
||
if (result === result)
|
||
throw "Failed opaqueDivBy2()";
|
||
result = opaqueDivBy4(null);
|
||
if (result !== 0)
|
||
throw "Failed opaqueDivBy4(null)";
|
||
result = opaqueDivBySafeMaxMinusOne("WebKit!");
|
||
if (result === result)
|
||
throw "Failed opaqueDivBy4(null)";
|
||
result = opaqueDivBySafeMin("");
|
||
if (result !== 0)
|
||
throw "Failed opaqueDivBySafeMin('')";
|
||
try {
|
||
result = opaqueDivBy2(Symbol());
|
||
throw "Failed opaqueDivBy2(Symbol())";
|
||
} catch (exception) {
|
||
if (exception != "TypeError: Cannot convert a symbol to a number")
|
||
throw "Wrong exception: " + exception;
|
||
}
|
||
result = opaqueDivBy4(true);
|
||
if (result !== 0.25)
|
||
throw "Failed opaqueDivBy4(true)";
|
||
result = opaqueDivBySafeMaxMinusOne(false);
|
||
if (result !== 0)
|
||
throw "Failed opaqueDivBySafeMaxMinusOne(false)";
|
||
result = opaqueDivBySafeMin({ valueOf: function() { return 42; }});
|
||
if (result !== Infinity)
|
||
throw "Failed opaqueDivBySafeMin({ valueOf: function() { return 42; }})";
|
||
}
|