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
7.9 KiB
JavaScript
258 lines
7.9 KiB
JavaScript
|
|
function mathCeilOnIntegers(value)
|
|
{
|
|
return Math.ceil(value);
|
|
}
|
|
noInline(mathCeilOnIntegers);
|
|
|
|
function mathCeilOnDoubles(value)
|
|
{
|
|
return Math.ceil(value);
|
|
}
|
|
noInline(mathCeilOnDoubles);
|
|
|
|
function mathCeilOnBooleans(value)
|
|
{
|
|
return Math.ceil(value);
|
|
}
|
|
noInline(mathCeilOnBooleans);
|
|
|
|
// The trivial cases first.
|
|
for (var i = 1; i < 1e4; ++i) {
|
|
var ceiledValue = mathCeilOnIntegers(i);
|
|
if (ceiledValue !== i)
|
|
throw new Error("mathCeilOnIntegers(" + i + ") = " + ceiledValue);
|
|
|
|
var ceiledValue = mathCeilOnIntegers(-i);
|
|
if (ceiledValue !== -i)
|
|
throw new Error("mathCeilOnIntegers(" + -i + ") = " + ceiledValue);
|
|
|
|
var doubleLow = i + 0.4;
|
|
var ceiledValue = mathCeilOnDoubles(doubleLow);
|
|
if (ceiledValue !== i + 1.0)
|
|
throw new Error("mathCeilOnDoubles(" + doubleLow + ") = " + ceiledValue);
|
|
|
|
var doubleHigh = i + 0.6;
|
|
var ceiledValue = mathCeilOnDoubles(doubleHigh);
|
|
if (ceiledValue !== i + 1)
|
|
throw new Error("mathCeilOnDoubles(" + doubleHigh + ") = " + ceiledValue);
|
|
|
|
var doubleMid = i + 0.5;
|
|
var ceiledValue = mathCeilOnDoubles(doubleMid);
|
|
if (ceiledValue !== i + 1)
|
|
throw new Error("mathCeilOnDoubles(" + doubleMid + ") = " + ceiledValue);
|
|
|
|
var ceiledValue = mathCeilOnDoubles(-0.6);
|
|
if (ceiledValue !== -0.0)
|
|
throw new Error("mathCeilOnDoubles(-0.6) = " + ceiledValue);
|
|
}
|
|
|
|
// Some more interesting cases, some of them well OSR exit when the return value is zero.
|
|
for (var i = 0; i < 1e4; ++i) {
|
|
var ceiledValue = mathCeilOnIntegers(i);
|
|
if (ceiledValue !== i)
|
|
throw new Error("mathCeilOnIntegers(" + i + ") = " + ceiledValue);
|
|
|
|
var ceiledValue = mathCeilOnIntegers(-i);
|
|
if (ceiledValue !== -i)
|
|
throw new Error("mathCeilOnIntegers(-" + i + ") = " + ceiledValue);
|
|
|
|
var ceiledValue = mathCeilOnDoubles(-0.4);
|
|
if (ceiledValue !== 0)
|
|
throw new Error("mathCeilOnDoubles(-0.4) = " + ceiledValue);
|
|
|
|
var ceiledValue = mathCeilOnDoubles(-0.5);
|
|
if (ceiledValue !== 0)
|
|
throw new Error("mathCeilOnDoubles(-0.5) = " + ceiledValue);
|
|
|
|
var ceiledValue = mathCeilOnDoubles(-0);
|
|
if (!(ceiledValue === 0 && (1/ceiledValue) === -Infinity))
|
|
throw new Error("mathCeilOnDoubles(-0) = " + ceiledValue);
|
|
|
|
var ceiledValue = mathCeilOnDoubles(NaN);
|
|
if (ceiledValue === ceiledValue)
|
|
throw new Error("mathCeilOnDoubles(NaN) = " + ceiledValue);
|
|
|
|
var ceiledValue = mathCeilOnDoubles(Number.POSITIVE_INFINITY);
|
|
if (ceiledValue !== Number.POSITIVE_INFINITY)
|
|
throw new Error("mathCeilOnDoubles(Number.POSITIVE_INFINITY) = " + ceiledValue);
|
|
|
|
var ceiledValue = mathCeilOnDoubles(Number.NEGATIVE_INFINITY);
|
|
if (ceiledValue !== Number.NEGATIVE_INFINITY)
|
|
throw new Error("mathCeilOnDoubles(Number.NEGATIVE_INFINITY) = " + ceiledValue);
|
|
|
|
var boolean = !!(i % 2);
|
|
var ceiledBoolean = mathCeilOnBooleans(boolean);
|
|
if (ceiledBoolean != boolean)
|
|
throw new Error("mathCeilOnDoubles(" + boolean + ") = " + ceiledBoolean);
|
|
}
|
|
|
|
function uselessMathCeil(value)
|
|
{
|
|
return Math.ceil(value|0);
|
|
}
|
|
noInline(uselessMathCeil);
|
|
|
|
for (var i = 0; i < 1e4; ++i) {
|
|
var ceiledValue = uselessMathCeil(i);
|
|
if (ceiledValue !== i)
|
|
throw new Error("uselessMathCeil(" + i + ") = " + ceiledValue);
|
|
|
|
var doubleLow = i + 0.4;
|
|
var ceiledValue = uselessMathCeil(doubleLow);
|
|
if (ceiledValue !== i)
|
|
throw new Error("uselessMathCeil(" + doubleLow + ") = " + ceiledValue);
|
|
|
|
var doubleHigh = i + 0.6;
|
|
var ceiledValue = uselessMathCeil(doubleHigh);
|
|
if (ceiledValue !== i)
|
|
throw new Error("uselessMathCeil(" + doubleHigh + ") = " + ceiledValue);
|
|
|
|
var doubleMid = i + 0.5;
|
|
var ceiledValue = uselessMathCeil(doubleMid);
|
|
if (ceiledValue !== i)
|
|
throw new Error("uselessMathCeil(" + doubleMid + ") = " + ceiledValue);
|
|
|
|
var ceiledValue = uselessMathCeil(-0.4);
|
|
if (ceiledValue !== 0)
|
|
throw new Error("uselessMathCeil(-0.4) = " + ceiledValue);
|
|
|
|
var ceiledValue = uselessMathCeil(-0.5);
|
|
if (ceiledValue !== 0)
|
|
throw new Error("uselessMathCeil(-0.5) = " + ceiledValue);
|
|
|
|
var ceiledValue = uselessMathCeil(-0.6);
|
|
if (ceiledValue !== 0)
|
|
throw new Error("uselessMathCeil(-0.6) = " + ceiledValue);
|
|
}
|
|
|
|
function mathCeilWithOverflow(value)
|
|
{
|
|
return Math.ceil(value);
|
|
}
|
|
noInline(mathCeilWithOverflow);
|
|
|
|
for (var i = 0; i < 1e4; ++i) {
|
|
var bigValue = 1000000000000;
|
|
var ceiledValue = mathCeilWithOverflow(bigValue);
|
|
if (ceiledValue !== bigValue)
|
|
throw new Error("mathCeilWithOverflow(" + bigValue + ") = " + ceiledValue);
|
|
}
|
|
|
|
function mathCeilConsumedAsDouble(value)
|
|
{
|
|
return Math.ceil(value) * 0.5;
|
|
}
|
|
noInline(mathCeilConsumedAsDouble);
|
|
|
|
for (var i = 0; i < 1e4; ++i) {
|
|
var doubleValue = i + 0.1;
|
|
var ceiledValue = mathCeilConsumedAsDouble(doubleValue);
|
|
if (ceiledValue !== ((i + 1) * 0.5))
|
|
throw new Error("mathCeilConsumedAsDouble(" + doubleValue + ") = " + ceiledValue);
|
|
|
|
var doubleValue = i + 0.6;
|
|
var ceiledValue = mathCeilConsumedAsDouble(doubleValue);
|
|
if (ceiledValue !== ((i + 1) * 0.5))
|
|
throw new Error("mathCeilConsumedAsDouble(" + doubleValue + ") = " + ceiledValue);
|
|
|
|
}
|
|
|
|
function mathCeilDoesNotCareAboutMinusZero(value)
|
|
{
|
|
return Math.ceil(value)|0;
|
|
}
|
|
noInline(mathCeilDoesNotCareAboutMinusZero);
|
|
|
|
for (var i = 0; i < 1e4; ++i) {
|
|
var doubleMid = i + 0.5;
|
|
var ceiledValue = mathCeilDoesNotCareAboutMinusZero(doubleMid);
|
|
if (ceiledValue !== i + 1)
|
|
throw new Error("mathCeilDoesNotCareAboutMinusZero(" + doubleMid + ") = " + ceiledValue);
|
|
}
|
|
|
|
|
|
// *** Function arguments. ***
|
|
function mathCeilNoArguments()
|
|
{
|
|
return Math.ceil();
|
|
}
|
|
noInline(mathCeilNoArguments);
|
|
|
|
function mathCeilTooManyArguments(a, b, c)
|
|
{
|
|
return Math.ceil(a, b, c);
|
|
}
|
|
noInline(mathCeilTooManyArguments);
|
|
|
|
for (var i = 0; i < 1e4; ++i) {
|
|
var value = mathCeilNoArguments();
|
|
if (value === value)
|
|
throw new Error("mathCeilNoArguments() = " + value);
|
|
|
|
var value = mathCeilTooManyArguments(2.1, 3, 5);
|
|
if (value !== 3)
|
|
throw new Error("mathCeilTooManyArguments() = " + value);
|
|
}
|
|
|
|
|
|
// *** Constant as arguments. ***
|
|
function testMathCeilOnConstants()
|
|
{
|
|
var value = Math.ceil(0);
|
|
if (value !== 0)
|
|
throw new Error("Math.ceil(0) = " + value);
|
|
var value = Math.ceil(-0);
|
|
if (!(value === 0 && (1/value) === -Infinity))
|
|
throw new Error("Math.ceil(-0) = " + value);
|
|
var value = Math.ceil(1);
|
|
if (value !== 1)
|
|
throw new Error("Math.ceil(1) = " + value);
|
|
var value = Math.ceil(-1);
|
|
if (value !== -1)
|
|
throw new Error("Math.ceil(-1) = " + value);
|
|
var value = Math.ceil(42);
|
|
if (value !== 42)
|
|
throw new Error("Math.ceil(42) = " + value);
|
|
var value = Math.ceil(-42.2);
|
|
if (value !== -42)
|
|
throw new Error("Math.ceil(-42.2) = " + value);
|
|
var value = Math.ceil(NaN);
|
|
if (value === value)
|
|
throw new Error("Math.ceil(NaN) = " + value);
|
|
var value = Math.ceil(Number.POSITIVE_INFINITY);
|
|
if (value !== Infinity)
|
|
throw new Error("Math.ceil(Number.POSITIVE_INFINITY) = " + value);
|
|
var value = Math.ceil(Number.NEGATIVE_INFINITY);
|
|
if (value !== -Infinity)
|
|
throw new Error("Math.ceil(Number.NEGATIVE_INFINITY) = " + value);
|
|
var value = Math.ceil(Math.E);
|
|
if (value !== 3)
|
|
throw new Error("Math.ceil(Math.E) = " + value);
|
|
}
|
|
noInline(testMathCeilOnConstants);
|
|
|
|
for (var i = 0; i < 1e4; ++i) {
|
|
testMathCeilOnConstants();
|
|
}
|
|
|
|
|
|
// *** Struct transition. ***
|
|
function mathCeilStructTransition(value)
|
|
{
|
|
return Math.ceil(value);
|
|
}
|
|
noInline(mathCeilStructTransition);
|
|
|
|
for (var i = 0; i < 1e4; ++i) {
|
|
var value = mathCeilStructTransition(42.5);
|
|
if (value !== 43)
|
|
throw new Error("mathCeilStructTransition(42.5) = " + value);
|
|
}
|
|
|
|
Math.ceil = function() { return arguments[0] + 5; }
|
|
|
|
var value = mathCeilStructTransition(42);
|
|
if (value !== 47)
|
|
throw new Error("mathCeilStructTransition(42) after transition = " + value);
|