mirror of
https://github.com/tc39/test262.git
synced 2025-05-03 14:30:27 +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)
258 lines
8.0 KiB
JavaScript
258 lines
8.0 KiB
JavaScript
|
|
function mathFloorOnIntegers(value)
|
|
{
|
|
return Math.floor(value);
|
|
}
|
|
noInline(mathFloorOnIntegers);
|
|
|
|
function mathFloorOnDoubles(value)
|
|
{
|
|
return Math.floor(value);
|
|
}
|
|
noInline(mathFloorOnDoubles);
|
|
|
|
function mathFloorOnBooleans(value)
|
|
{
|
|
return Math.floor(value);
|
|
}
|
|
noInline(mathFloorOnBooleans);
|
|
|
|
// The trivial cases first.
|
|
for (var i = 1; i < 1e4; ++i) {
|
|
var flooredValue = mathFloorOnIntegers(i);
|
|
if (flooredValue !== i)
|
|
throw new Error("mathFloorOnIntegers(" + i + ") = " + flooredValue);
|
|
|
|
var flooredValue = mathFloorOnIntegers(-i);
|
|
if (flooredValue !== -i)
|
|
throw new Error("mathFloorOnIntegers(" + -i + ") = " + flooredValue);
|
|
|
|
var doubleLow = i + 0.4;
|
|
var flooredValue = mathFloorOnDoubles(doubleLow);
|
|
if (flooredValue !== i)
|
|
throw new Error("mathFloorOnDoubles(" + doubleLow + ") = " + flooredValue);
|
|
|
|
var doubleHigh = i + 0.6;
|
|
var flooredValue = mathFloorOnDoubles(doubleHigh);
|
|
if (flooredValue !== i)
|
|
throw new Error("mathFloorOnDoubles(" + doubleHigh + ") = " + flooredValue);
|
|
|
|
var doubleMid = i + 0.5;
|
|
var flooredValue = mathFloorOnDoubles(doubleMid);
|
|
if (flooredValue !== i)
|
|
throw new Error("mathFloorOnDoubles(" + doubleMid + ") = " + flooredValue);
|
|
|
|
var flooredValue = mathFloorOnDoubles(-0.6);
|
|
if (flooredValue !== -1.0)
|
|
throw new Error("mathFloorOnDoubles(-0.6) = " + flooredValue);
|
|
}
|
|
|
|
// Some more interesting cases, some of them well OSR exit when the return value is zero.
|
|
for (var i = 0; i < 1e4; ++i) {
|
|
var flooredValue = mathFloorOnIntegers(i);
|
|
if (flooredValue !== i)
|
|
throw new Error("mathFloorOnIntegers(" + i + ") = " + flooredValue);
|
|
|
|
var flooredValue = mathFloorOnIntegers(-i);
|
|
if (flooredValue !== -i)
|
|
throw new Error("mathFloorOnIntegers(-" + i + ") = " + flooredValue);
|
|
|
|
var flooredValue = mathFloorOnDoubles(-0.4);
|
|
if (flooredValue !== -1.00)
|
|
throw new Error("mathFloorOnDoubles(-0.4) = " + flooredValue);
|
|
|
|
var flooredValue = mathFloorOnDoubles(-0.5);
|
|
if (flooredValue !== -1.0)
|
|
throw new Error("mathFloorOnDoubles(-0.5) = " + flooredValue);
|
|
|
|
var flooredValue = mathFloorOnDoubles(-0);
|
|
if (!(flooredValue === 0 && (1/flooredValue) === -Infinity))
|
|
throw new Error("mathFloorOnDoubles(-0) = " + flooredValue);
|
|
|
|
var flooredValue = mathFloorOnDoubles(NaN);
|
|
if (flooredValue === flooredValue)
|
|
throw new Error("mathFloorOnDoubles(NaN) = " + flooredValue);
|
|
|
|
var flooredValue = mathFloorOnDoubles(Number.POSITIVE_INFINITY);
|
|
if (flooredValue !== Number.POSITIVE_INFINITY)
|
|
throw new Error("mathFloorOnDoubles(Number.POSITIVE_INFINITY) = " + flooredValue);
|
|
|
|
var flooredValue = mathFloorOnDoubles(Number.NEGATIVE_INFINITY);
|
|
if (flooredValue !== Number.NEGATIVE_INFINITY)
|
|
throw new Error("mathFloorOnDoubles(Number.NEGATIVE_INFINITY) = " + flooredValue);
|
|
|
|
var boolean = !!(i % 2);
|
|
var flooredBoolean = mathFloorOnBooleans(boolean);
|
|
if (flooredBoolean != boolean)
|
|
throw new Error("mathFloorOnDoubles(" + boolean + ") = " + flooredBoolean);
|
|
}
|
|
|
|
function uselessMathFloor(value)
|
|
{
|
|
return Math.floor(value|0);
|
|
}
|
|
noInline(uselessMathFloor);
|
|
|
|
for (var i = 0; i < 1e4; ++i) {
|
|
var flooredValue = uselessMathFloor(i);
|
|
if (flooredValue !== i)
|
|
throw new Error("uselessMathFloor(" + i + ") = " + flooredValue);
|
|
|
|
var doubleLow = i + 0.4;
|
|
var flooredValue = uselessMathFloor(doubleLow);
|
|
if (flooredValue !== i)
|
|
throw new Error("uselessMathFloor(" + doubleLow + ") = " + flooredValue);
|
|
|
|
var doubleHigh = i + 0.6;
|
|
var flooredValue = uselessMathFloor(doubleHigh);
|
|
if (flooredValue !== i)
|
|
throw new Error("uselessMathFloor(" + doubleHigh + ") = " + flooredValue);
|
|
|
|
var doubleMid = i + 0.5;
|
|
var flooredValue = uselessMathFloor(doubleMid);
|
|
if (flooredValue !== i)
|
|
throw new Error("uselessMathFloor(" + doubleMid + ") = " + flooredValue);
|
|
|
|
var flooredValue = uselessMathFloor(-0.4);
|
|
if (flooredValue !== 0)
|
|
throw new Error("uselessMathFloor(-0.4) = " + flooredValue);
|
|
|
|
var flooredValue = uselessMathFloor(-0.5);
|
|
if (flooredValue !== 0)
|
|
throw new Error("uselessMathFloor(-0.5) = " + flooredValue);
|
|
|
|
var flooredValue = uselessMathFloor(-0.6);
|
|
if (flooredValue !== 0)
|
|
throw new Error("uselessMathFloor(-0.6) = " + flooredValue);
|
|
}
|
|
|
|
function mathFloorWithOverflow(value)
|
|
{
|
|
return Math.floor(value);
|
|
}
|
|
noInline(mathFloorWithOverflow);
|
|
|
|
for (var i = 0; i < 1e4; ++i) {
|
|
var bigValue = 1000000000000;
|
|
var flooredValue = mathFloorWithOverflow(bigValue);
|
|
if (flooredValue !== bigValue)
|
|
throw new Error("mathFloorWithOverflow(" + bigValue + ") = " + flooredValue);
|
|
}
|
|
|
|
function mathFloorConsumedAsDouble(value)
|
|
{
|
|
return Math.floor(value) * 0.5;
|
|
}
|
|
noInline(mathFloorConsumedAsDouble);
|
|
|
|
for (var i = 0; i < 1e4; ++i) {
|
|
var doubleValue = i + 0.1;
|
|
var flooredValue = mathFloorConsumedAsDouble(doubleValue);
|
|
if (flooredValue !== (i * 0.5))
|
|
throw new Error("mathFloorConsumedAsDouble(" + doubleValue + ") = " + flooredValue);
|
|
|
|
var doubleValue = i + 0.6;
|
|
var flooredValue = mathFloorConsumedAsDouble(doubleValue);
|
|
if (flooredValue !== (i * 0.5))
|
|
throw new Error("mathFloorConsumedAsDouble(" + doubleValue + ") = " + flooredValue);
|
|
|
|
}
|
|
|
|
function mathFloorDoesNotCareAboutMinusZero(value)
|
|
{
|
|
return Math.floor(value)|0;
|
|
}
|
|
noInline(mathFloorDoesNotCareAboutMinusZero);
|
|
|
|
for (var i = 0; i < 1e4; ++i) {
|
|
var doubleMid = i + 0.5;
|
|
var flooredValue = mathFloorDoesNotCareAboutMinusZero(doubleMid);
|
|
if (flooredValue !== i)
|
|
throw new Error("mathFloorDoesNotCareAboutMinusZero(" + doubleMid + ") = " + flooredValue);
|
|
}
|
|
|
|
|
|
// *** Function arguments. ***
|
|
function mathFloorNoArguments()
|
|
{
|
|
return Math.floor();
|
|
}
|
|
noInline(mathFloorNoArguments);
|
|
|
|
function mathFloorTooManyArguments(a, b, c)
|
|
{
|
|
return Math.floor(a, b, c);
|
|
}
|
|
noInline(mathFloorTooManyArguments);
|
|
|
|
for (var i = 0; i < 1e4; ++i) {
|
|
var value = mathFloorNoArguments();
|
|
if (value === value)
|
|
throw new Error("mathFloorNoArguments() = " + value);
|
|
|
|
var value = mathFloorTooManyArguments(2.1, 3, 5);
|
|
if (value !== 2)
|
|
throw new Error("mathFloorTooManyArguments() = " + value);
|
|
}
|
|
|
|
|
|
// *** Constant as arguments. ***
|
|
function testMathFloorOnConstants()
|
|
{
|
|
var value = Math.floor(0);
|
|
if (value !== 0)
|
|
throw new Error("Math.floor(0) = " + value);
|
|
var value = Math.floor(-0);
|
|
if (!(value === 0 && (1/value) === -Infinity))
|
|
throw new Error("Math.floor(-0) = " + value);
|
|
var value = Math.floor(1);
|
|
if (value !== 1)
|
|
throw new Error("Math.floor(1) = " + value);
|
|
var value = Math.floor(-1);
|
|
if (value !== -1)
|
|
throw new Error("Math.floor(-1) = " + value);
|
|
var value = Math.floor(42);
|
|
if (value !== 42)
|
|
throw new Error("Math.floor(42) = " + value);
|
|
var value = Math.floor(-42.2);
|
|
if (value !== -43)
|
|
throw new Error("Math.floor(-42.2) = " + value);
|
|
var value = Math.floor(NaN);
|
|
if (value === value)
|
|
throw new Error("Math.floor(NaN) = " + value);
|
|
var value = Math.floor(Number.POSITIVE_INFINITY);
|
|
if (value !== Infinity)
|
|
throw new Error("Math.floor(Number.POSITIVE_INFINITY) = " + value);
|
|
var value = Math.floor(Number.NEGATIVE_INFINITY);
|
|
if (value !== -Infinity)
|
|
throw new Error("Math.floor(Number.NEGATIVE_INFINITY) = " + value);
|
|
var value = Math.floor(Math.E);
|
|
if (value !== 2)
|
|
throw new Error("Math.floor(Math.E) = " + value);
|
|
}
|
|
noInline(testMathFloorOnConstants);
|
|
|
|
for (var i = 0; i < 1e4; ++i) {
|
|
testMathFloorOnConstants();
|
|
}
|
|
|
|
|
|
// *** Struct transition. ***
|
|
function mathFloorStructTransition(value)
|
|
{
|
|
return Math.floor(value);
|
|
}
|
|
noInline(mathFloorStructTransition);
|
|
|
|
for (var i = 0; i < 1e4; ++i) {
|
|
var value = mathFloorStructTransition(42.5);
|
|
if (value !== 42)
|
|
throw new Error("mathFloorStructTransition(42.5) = " + value);
|
|
}
|
|
|
|
Math.floor = function() { return arguments[0] + 5; }
|
|
|
|
var value = mathFloorStructTransition(42);
|
|
if (value !== 47)
|
|
throw new Error("mathFloorStructTransition(42) after transition = " + value);
|