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)
261 lines
6.3 KiB
JavaScript
261 lines
6.3 KiB
JavaScript
function isNaNOnInteger(value)
|
|
{
|
|
return isNaN(value);
|
|
}
|
|
noInline(isNaNOnInteger);
|
|
|
|
// *** Test simple cases on integers. ***
|
|
function testIsNaNOnIntegers()
|
|
{
|
|
// Bounds.
|
|
var value = isNaNOnInteger(0);
|
|
if (value)
|
|
throw "isNaNOnInteger(0) = " + value;
|
|
|
|
var value = isNaNOnInteger(-2147483648);
|
|
if (value)
|
|
throw "isNaNOnInteger(-2147483648) = " + value;
|
|
|
|
var value = isNaNOnInteger(2147483647);
|
|
if (value)
|
|
throw "isNaNOnInteger(2147483647) = " + value;
|
|
|
|
// Simple values.
|
|
var value = isNaNOnInteger(-1);
|
|
if (value)
|
|
throw "isNaNOnInteger(-1) = " + value;
|
|
|
|
var value = isNaNOnInteger(42);
|
|
if (value)
|
|
throw "isNaNOnInteger(42) = " + value;
|
|
|
|
var value = isNaNOnInteger(-42);
|
|
if (value)
|
|
throw "isNaNOnInteger(-42) = " + value;
|
|
}
|
|
noInline(testIsNaNOnIntegers);
|
|
|
|
for (var i = 0; i < 1e4; ++i) {
|
|
testIsNaNOnIntegers();
|
|
}
|
|
|
|
// Make sure we don't do anything stupid when the type is unexpected.
|
|
function verifyIsNaNOnIntegerWithOtherTypes()
|
|
{
|
|
var value = isNaNOnInteger(Math.PI);
|
|
if (value)
|
|
throw "isNaNOnInteger(Math.PI) = " + value;
|
|
|
|
var value = isNaNOnInteger("42");
|
|
if (value)
|
|
throw "isNaNOnInteger(\"42\") = " + value;
|
|
|
|
var value = isNaNOnInteger("WebKit");
|
|
if (!value)
|
|
throw "isNaNOnInteger(\"WebKit\") = " + value;
|
|
|
|
var value = isNaNOnInteger(-0);
|
|
if (value)
|
|
throw "isNaNOnInteger(-0) = " + value;
|
|
}
|
|
noInline(verifyIsNaNOnIntegerWithOtherTypes);
|
|
|
|
for (var i = 0; i < 1e4; ++i) {
|
|
verifyIsNaNOnIntegerWithOtherTypes();
|
|
}
|
|
|
|
// *** Test simple cases on doubles. ***
|
|
function isNaNOnDouble(value)
|
|
{
|
|
return isNaN(value);
|
|
}
|
|
noInline(isNaNOnDouble);
|
|
|
|
// Test simple cases on doubles.
|
|
function testIsNaNOnDoubles()
|
|
{
|
|
var value = isNaNOnDouble(Math.PI);
|
|
if (value)
|
|
throw "isNaNOnDouble(Math.PI) = " + value;
|
|
|
|
var value = isNaNOnDouble(Math.E);
|
|
if (value)
|
|
throw "isNaNOnDouble(Math.E) = " + value;
|
|
|
|
var value = isNaNOnDouble(Math.LN2);
|
|
if (value)
|
|
throw "isNaNOnDouble(Math.LN2) = " + value;
|
|
|
|
var value = isNaNOnDouble(-0);
|
|
if (value)
|
|
throw "isNaNOnDouble(-0) = " + value;
|
|
|
|
var value = isNaNOnDouble(NaN);
|
|
if (!value)
|
|
throw "isNaNOnDouble(NaN) = " + value;
|
|
|
|
var value = isNaNOnDouble(Number.POSITIVE_INFINITY);
|
|
if (value)
|
|
throw "isNaNOnDouble(Number.POSITIVE_INFINITY) = " + value;
|
|
|
|
var value = isNaNOnDouble(Number.NEGATIVE_INFINITY);
|
|
if (value)
|
|
throw "isNaNOnDouble(Number.NEGATIVE_INFINITY) = " + value;
|
|
}
|
|
noInline(testIsNaNOnDoubles);
|
|
|
|
for (var i = 0; i < 1e6; ++i) {
|
|
testIsNaNOnDoubles();
|
|
}
|
|
|
|
// Make sure we don't do anything stupid when the type is unexpected.
|
|
function verifyIsNaNOnDoublesWithOtherTypes()
|
|
{
|
|
var value = isNaNOnDouble(1);
|
|
if (value)
|
|
throw "isNaNOnDouble(1) = " + value;
|
|
|
|
var value = isNaNOnDouble("42");
|
|
if (value)
|
|
throw "isNaNOnDouble(\"42\") = " + value;
|
|
|
|
var value = isNaNOnDouble("WebKit");
|
|
if (!value)
|
|
throw "isNaNOnDouble(\"WebKit\") = " + value;
|
|
|
|
var value = isNaNOnDouble({});
|
|
if (!value)
|
|
throw "isNaNOnDouble({}) = " + value;
|
|
}
|
|
noInline(verifyIsNaNOnDoublesWithOtherTypes);
|
|
|
|
for (var i = 0; i < 1e4; ++i) {
|
|
verifyIsNaNOnDoublesWithOtherTypes();
|
|
}
|
|
|
|
// Make sure we still return NaN for type coerced values for global isNaN.
|
|
function verifyIsNaNOnCoercedTypes()
|
|
{
|
|
var value = isNaNOnInteger("NaN");
|
|
if (!value)
|
|
throw "isNaNOnInteger(\"NaN\") = " + value;
|
|
|
|
var value = isNaNOnInteger({ valueOf() { return NaN; } });
|
|
if (!value)
|
|
throw "isNaNOnInteger({ valueOf() { return NaN; } }) = " + value;
|
|
}
|
|
noInline(verifyIsNaNOnCoercedTypes);
|
|
|
|
for (var i = 0; i < 1e4; ++i) {
|
|
verifyIsNaNOnCoercedTypes();
|
|
}
|
|
|
|
|
|
// *** Unusual arguments. ***
|
|
function isNaNNoArguments()
|
|
{
|
|
return isNaN();
|
|
}
|
|
noInline(isNaNNoArguments);
|
|
|
|
function isNaNTooManyArguments(a, b, c)
|
|
{
|
|
return isNaN(a, b, c);
|
|
}
|
|
noInline(isNaNTooManyArguments);
|
|
|
|
|
|
for (var i = 0; i < 1e4; ++i) {
|
|
var value = isNaNNoArguments();
|
|
if (!value)
|
|
throw "isNaNNoArguments() = " + value;
|
|
|
|
value = isNaNTooManyArguments(2, 3, 5);
|
|
if (value)
|
|
throw "isNaNTooManyArguments() = " + value;
|
|
}
|
|
|
|
|
|
// *** Constant as arguments. ***
|
|
function testIsNaNOnConstants()
|
|
{
|
|
var value = isNaN(0);
|
|
if (value)
|
|
throw "isNaN(0) = " + value;
|
|
var value = isNaN(-0);
|
|
if (value)
|
|
throw "isNaN(-0) = " + value;
|
|
var value = isNaN(1);
|
|
if (value)
|
|
throw "isNaN(1) = " + value;
|
|
var value = isNaN(-1);
|
|
if (value)
|
|
throw "isNaN(-1) = " + value;
|
|
var value = isNaN(42);
|
|
if (value)
|
|
throw "isNaN(42) = " + value;
|
|
var value = isNaN(-42);
|
|
if (value)
|
|
throw "isNaN(-42) = " + value;
|
|
var value = isNaN(Number.POSITIVE_INFINITY);
|
|
if (value)
|
|
throw "isNaN(Number.POSITIVE_INFINITY) = " + value;
|
|
var value = isNaN(Number.NEGATIVE_INFINITY);
|
|
if (value)
|
|
throw "isNaN(Number.NEGATIVE_INFINITY) = " + value;
|
|
var value = isNaN(Math.E);
|
|
if (value)
|
|
throw "isNaN(Math.E) = " + value;
|
|
var value = isNaN(NaN);
|
|
if (!value)
|
|
throw "isNaN(NaN) = " + value;
|
|
}
|
|
noInline(testIsNaNOnConstants);
|
|
|
|
for (var i = 0; i < 1e4; ++i) {
|
|
testIsNaNOnConstants();
|
|
}
|
|
|
|
|
|
// *** Type Coercion Side effects. ***
|
|
function isNaNTypeCoercionSideEffects(value)
|
|
{
|
|
return isNaN(value);
|
|
}
|
|
noInline(isNaNTypeCoercionSideEffects);
|
|
|
|
for (var i = 0; i < 1e4; ++i) {
|
|
var value = isNaNTypeCoercionSideEffects(42);
|
|
if (value)
|
|
throw "isNaNTypeCoercionSideEffects(42) = " + value;
|
|
}
|
|
|
|
var globalCounter = 0;
|
|
for (var i = 0; i < 1e4; ++i) {
|
|
var value = isNaNTypeCoercionSideEffects({ valueOf() { return globalCounter++; } });
|
|
if (value)
|
|
throw "isNaNTypeCoercionSideEffects({ valueOf() { return globalCounter++; } }) = " + value;
|
|
}
|
|
if (globalCounter !== 1e4)
|
|
throw "globalCounter =" + globalCounter;
|
|
|
|
|
|
// *** Struct transition. ***
|
|
function isNaNStructTransition(value)
|
|
{
|
|
return isNaN(value);
|
|
}
|
|
noInline(isNaNStructTransition);
|
|
|
|
for (var i = 0; i < 1e4; ++i) {
|
|
var value = isNaNStructTransition(42);
|
|
if (value)
|
|
throw "isNaNStructTransition(42) = " + value;
|
|
}
|
|
|
|
isNaN = function() { return 123; }
|
|
|
|
var value = isNaNStructTransition(42);
|
|
if (value !== 123)
|
|
throw "isNaNStructTransition(42) after transition = " + value;
|