mirror of
				https://github.com/tc39/test262.git
				synced 2025-11-04 05:33:50 +01: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);
 |