blob: 77abe201fcf36acbc1ed280299537dccca041cbb [file] [log] [blame]
function numberIsNaNOnInteger(value)
{
return Number.isNaN(value);
}
noInline(numberIsNaNOnInteger);
// *** Test simple cases on integers. ***
function testNumberIsNaNOnIntegers()
{
// Bounds.
var value = numberIsNaNOnInteger(0);
if (value)
throw "numberIsNaNOnInteger(0) = " + value;
var value = numberIsNaNOnInteger(-2147483648);
if (value)
throw "numberIsNaNOnInteger(-2147483648) = " + value;
var value = numberIsNaNOnInteger(2147483647);
if (value)
throw "numberIsNaNOnInteger(2147483647) = " + value;
// Simple values.
var value = numberIsNaNOnInteger(-1);
if (value)
throw "numberIsNaNOnInteger(-1) = " + value;
var value = numberIsNaNOnInteger(42);
if (value)
throw "numberIsNaNOnInteger(42) = " + value;
var value = numberIsNaNOnInteger(-42);
if (value)
throw "numberIsNaNOnInteger(-42) = " + value;
}
noInline(testNumberIsNaNOnIntegers);
for (var i = 0; i < 1e4; ++i) {
testNumberIsNaNOnIntegers();
}
// Make sure we don't do anything stupid when the type is unexpected.
function verifyNumberIsNaNOnIntegerWithOtherTypes()
{
var value = numberIsNaNOnInteger(Math.PI);
if (value)
throw "numberIsNaNOnInteger(Math.PI) = " + value;
var value = numberIsNaNOnInteger("42");
if (value)
throw "numberIsNaNOnInteger(\"42\") = " + value;
var value = numberIsNaNOnInteger("WebKit");
if (value)
throw "numberIsNaNOnInteger(\"WebKit\") = " + value;
var value = numberIsNaNOnInteger(-0);
if (value)
throw "numberIsNaNOnInteger(-0) = " + value;
}
noInline(verifyNumberIsNaNOnIntegerWithOtherTypes);
for (var i = 0; i < 1e4; ++i) {
verifyNumberIsNaNOnIntegerWithOtherTypes();
}
// *** Test simple cases on doubles. ***
function numberIsNaNOnDouble(value)
{
return Number.isNaN(value);
}
noInline(numberIsNaNOnDouble);
// Test simple cases on doubles.
function testNumberIsNaNOnDoubles()
{
var value = numberIsNaNOnDouble(Math.PI);
if (value)
throw "numberIsNaNOnDouble(Math.PI) = " + value;
var value = numberIsNaNOnDouble(Math.E);
if (value)
throw "numberIsNaNOnDouble(Math.E) = " + value;
var value = numberIsNaNOnDouble(Math.LN2);
if (value)
throw "numberIsNaNOnDouble(Math.LN2) = " + value;
var value = numberIsNaNOnDouble(-0);
if (value)
throw "numberIsNaNOnDouble(-0) = " + value;
var value = numberIsNaNOnDouble(NaN);
if (!value)
throw "numberIsNaNOnDouble(NaN) = " + value;
var value = numberIsNaNOnDouble(Number.POSITIVE_INFINITY);
if (value)
throw "numberIsNaNOnDouble(Number.POSITIVE_INFINITY) = " + value;
var value = numberIsNaNOnDouble(Number.NEGATIVE_INFINITY);
if (value)
throw "numberIsNaNOnDouble(Number.NEGATIVE_INFINITY) = " + value;
}
noInline(testNumberIsNaNOnDoubles);
for (var i = 0; i < 1e4; ++i) {
testNumberIsNaNOnDoubles();
}
// Make sure we don't do anything stupid when the type is unexpected.
function verifyNumberIsNaNOnDoublesWithOtherTypes()
{
var value = numberIsNaNOnDouble(1);
if (value)
throw "numberIsNaNOnDouble(1) = " + value;
var value = numberIsNaNOnDouble("42");
if (value)
throw "numberIsNaNOnDouble(\"42\") = " + value;
var value = numberIsNaNOnDouble("WebKit");
if (value)
throw "numberIsNaNOnDouble(\"WebKit\") = " + value;
var value = numberIsNaNOnDouble({});
if (value)
throw "numberIsNaNOnDouble({}) = " + value;
}
noInline(verifyNumberIsNaNOnDoublesWithOtherTypes);
for (var i = 0; i < 1e4; ++i) {
verifyNumberIsNaNOnDoublesWithOtherTypes();
}
// *** Unusual arguments. ***
function numberIsNaNNoArguments()
{
return Number.isNaN();
}
noInline(numberIsNaNNoArguments);
function numberIsNaNTooManyArguments(a, b, c)
{
return Number.isNaN(a, b, c);
}
noInline(numberIsNaNTooManyArguments);
for (var i = 0; i < 1e4; ++i) {
var value = numberIsNaNNoArguments();
if (value)
throw "numberIsNaNNoArguments() = " + value;
value = numberIsNaNTooManyArguments(2, 3, 5);
if (value)
throw "numberIsNaNTooManyArguments() = " + value;
}
// *** Constant as arguments. ***
function testNumberIsNaNOnConstants()
{
var value = Number.isNaN(0);
if (value)
throw "Number.isNaN(0) = " + value;
var value = Number.isNaN(-0);
if (value)
throw "Number.isNaN(-0) = " + value;
var value = Number.isNaN(1);
if (value)
throw "Number.isNaN(1) = " + value;
var value = Number.isNaN(-1);
if (value)
throw "Number.isNaN(-1) = " + value;
var value = Number.isNaN(42);
if (value)
throw "Number.isNaN(42) = " + value;
var value = Number.isNaN(-42);
if (value)
throw "Number.isNaN(-42) = " + value;
var value = Number.isNaN(Number.POSITIVE_INFINITY);
if (value)
throw "Number.isNaN(Number.POSITIVE_INFINITY) = " + value;
var value = Number.isNaN(Number.NEGATIVE_INFINITY);
if (value)
throw "Number.isNaN(Number.NEGATIVE_INFINITY) = " + value;
var value = Number.isNaN(Math.E);
if (value)
throw "Number.isNaN(Math.E) = " + value;
var value = Number.isNaN(NaN);
if (!value)
throw "Number.isNaN(NaN) = " + value;
}
noInline(testNumberIsNaNOnConstants);
for (var i = 0; i < 1e4; ++i) {
testNumberIsNaNOnConstants();
}
// *** Struct transition. ***
function numberIsNaNStructTransition(value)
{
return Number.isNaN(value);
}
noInline(numberIsNaNStructTransition);
for (var i = 0; i < 1e4; ++i) {
var value = numberIsNaNStructTransition(42);
if (value)
throw "numberIsNaNStructTransition(42) = " + value;
}
Number.isNaN = function() { return 123; }
var value = numberIsNaNStructTransition(42);
if (value !== 123)
throw "numberIsNaNStructTransition(42) after transition = " + value;