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)
		
			
				
	
	
		
			223 lines
		
	
	
		
			6.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			223 lines
		
	
	
		
			6.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
function mathClz32OnInteger(value)
 | 
						|
{
 | 
						|
    return Math.clz32(value);
 | 
						|
}
 | 
						|
noInline(mathClz32OnInteger);
 | 
						|
 | 
						|
// *** Test simple cases on integers. ***
 | 
						|
function testMathClz32OnIntegers()
 | 
						|
{
 | 
						|
    // Bounds.
 | 
						|
    var clzZero = mathClz32OnInteger(0);
 | 
						|
    if (clzZero != 32)
 | 
						|
        throw "mathClz32OnInteger(0) = " + clzZero;
 | 
						|
 | 
						|
    var clzIntMin = mathClz32OnInteger(-2147483648);
 | 
						|
    if (clzIntMin != 0)
 | 
						|
        throw "mathClz32OnInteger(-2147483648) = " + clzIntMin;
 | 
						|
 | 
						|
    var clzIntMax = mathClz32OnInteger(2147483647);
 | 
						|
    if (clzIntMax != 1)
 | 
						|
        throw "mathClz32OnInteger(2147483647) = " + clzIntMax;
 | 
						|
 | 
						|
    // Simple values.
 | 
						|
    var clzMinusOne = mathClz32OnInteger(-1);
 | 
						|
    if (clzMinusOne != 0)
 | 
						|
        throw "mathClz32OnInteger(-1) = " + clzMinusOne;
 | 
						|
 | 
						|
    var clzUltimateAnswer = mathClz32OnInteger(42);
 | 
						|
    if (clzUltimateAnswer != 26)
 | 
						|
        throw "mathClz32OnInteger(42) = " + clzUltimateAnswer;
 | 
						|
 | 
						|
    var clzMinusUltimateAnswer = mathClz32OnInteger(-42);
 | 
						|
    if (clzMinusUltimateAnswer != 0)
 | 
						|
        throw "mathClz32OnInteger(-42) = " + clzMinusUltimateAnswer;
 | 
						|
}
 | 
						|
noInline(testMathClz32OnIntegers);
 | 
						|
 | 
						|
for (var i = 0; i < 1e4; ++i) {
 | 
						|
    testMathClz32OnIntegers();
 | 
						|
}
 | 
						|
 | 
						|
// Make sure we don't do anything stupid when the type is unexpected.
 | 
						|
function verifyMathClz32OnIntegerWithOtherTypes()
 | 
						|
{
 | 
						|
    var clzPi = mathClz32OnInteger(Math.PI);
 | 
						|
    if (clzPi != 30)
 | 
						|
        throw "mathClz32OnInteger(Math.PI) = " + clzPi;
 | 
						|
 | 
						|
    var clzString = mathClz32OnInteger("42");
 | 
						|
    if (clzString != 26)
 | 
						|
        throw "mathClz32OnInteger(\"42\") = " + clzString;
 | 
						|
 | 
						|
    var clzString = mathClz32OnInteger("WebKit");
 | 
						|
    if (clzString != 32)
 | 
						|
        throw "mathClz32OnInteger(\"WebKit\") = " + clzString;
 | 
						|
 | 
						|
    var clzMinusZero = mathClz32OnInteger(-0);
 | 
						|
    if (clzMinusZero != 32)
 | 
						|
        throw "mathClz32OnInteger(-0) = " + clzMinusZero;
 | 
						|
}
 | 
						|
noInline(verifyMathClz32OnIntegerWithOtherTypes);
 | 
						|
 | 
						|
for (var i = 0; i < 1e4; ++i) {
 | 
						|
    verifyMathClz32OnIntegerWithOtherTypes();
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
// *** Test simple cases on doubles. ***
 | 
						|
function mathClz32OnDouble(value)
 | 
						|
{
 | 
						|
    return Math.clz32(value);
 | 
						|
}
 | 
						|
noInline(mathClz32OnDouble);
 | 
						|
 | 
						|
// Test simple cases on doubles.
 | 
						|
function testMathClz32OnDoubles()
 | 
						|
{
 | 
						|
    var value = mathClz32OnDouble(Math.PI);
 | 
						|
    if (value != 30)
 | 
						|
        throw "mathClz32OnDouble(Math.PI) = " + value;
 | 
						|
 | 
						|
    var value = mathClz32OnDouble(Math.E);
 | 
						|
    if (value != 30)
 | 
						|
        throw "mathClz32OnDouble(Math.E) = " + value;
 | 
						|
 | 
						|
    var value = mathClz32OnDouble(Math.LN2);
 | 
						|
    if (value != 32)
 | 
						|
        throw "mathClz32OnDouble(Math.LN2) = " + value;
 | 
						|
 | 
						|
    var value = mathClz32OnDouble(-0);
 | 
						|
    if (value != 32)
 | 
						|
        throw "mathClz32OnDouble(-0) = " + value;
 | 
						|
 | 
						|
    var value = mathClz32OnDouble(NaN);
 | 
						|
    if (value != 32)
 | 
						|
        throw "mathClz32OnDouble(NaN) = " + value;
 | 
						|
 | 
						|
    var value = mathClz32OnDouble(Number.POSITIVE_INFINITY);
 | 
						|
    if (value != 32)
 | 
						|
        throw "mathClz32OnDouble(Number.POSITIVE_INFINITY) = " + value;
 | 
						|
 | 
						|
    var value = mathClz32OnDouble(Number.NEGATIVE_INFINITY);
 | 
						|
    if (value != 32)
 | 
						|
        throw "mathClz32OnDouble(Number.NEGATIVE_INFINITY) = " + value;
 | 
						|
}
 | 
						|
noInline(testMathClz32OnDoubles);
 | 
						|
 | 
						|
for (var i = 0; i < 1e4; ++i) {
 | 
						|
    testMathClz32OnDoubles();
 | 
						|
}
 | 
						|
 | 
						|
// Make sure we don't do anything stupid when the type is unexpected.
 | 
						|
function verifyMathClz32OnDoublesWithOtherTypes()
 | 
						|
{
 | 
						|
    var clzOne = mathClz32OnDouble(1);
 | 
						|
    if (clzOne != 31)
 | 
						|
        throw "mathClz32OnDouble(1) = " + clzOne;
 | 
						|
 | 
						|
    var clzString = mathClz32OnDouble("42");
 | 
						|
    if (clzString != 26)
 | 
						|
        throw "mathClz32OnDouble(\"42\") = " + clzString;
 | 
						|
 | 
						|
    var clzString = mathClz32OnDouble("WebKit");
 | 
						|
    if (clzString != 32)
 | 
						|
        throw "mathClz32OnDouble(\"WebKit\") = " + clzString;
 | 
						|
 | 
						|
    var clzMinusZero = mathClz32OnDouble({});
 | 
						|
    if (clzMinusZero != 32)
 | 
						|
        throw "mathClz32OnDouble({}) = " + clzMinusZero;
 | 
						|
}
 | 
						|
noInline(verifyMathClz32OnDoublesWithOtherTypes);
 | 
						|
 | 
						|
for (var i = 0; i < 1e4; ++i) {
 | 
						|
    verifyMathClz32OnDoublesWithOtherTypes();
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
// *** Unusual arguments. ***
 | 
						|
function mathClz32NoArguments()
 | 
						|
{
 | 
						|
    return Math.clz32();
 | 
						|
}
 | 
						|
noInline(mathClz32NoArguments);
 | 
						|
 | 
						|
function mathClz32TooManyArguments(a, b, c)
 | 
						|
{
 | 
						|
    return Math.clz32(a, b, c);
 | 
						|
}
 | 
						|
noInline(mathClz32TooManyArguments);
 | 
						|
 | 
						|
 | 
						|
for (var i = 0; i < 1e4; ++i) {
 | 
						|
    var value = mathClz32NoArguments();
 | 
						|
    if (value !== 32)
 | 
						|
        throw "mathClz32NoArguments() = " + value;
 | 
						|
 | 
						|
    var value = mathClz32TooManyArguments(2, 3, 5);
 | 
						|
    if (value !== 30)
 | 
						|
        throw "mathClz32TooManyArguments() = " + value;
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
// *** Constant as arguments. ***
 | 
						|
function testMathClz32OnConstants()
 | 
						|
{
 | 
						|
    var value = Math.clz32(0);
 | 
						|
    if (value !== 32)
 | 
						|
        throw "Math.clz32(0) = " + value;
 | 
						|
    var value = Math.clz32(-0);
 | 
						|
    if (value !== 32)
 | 
						|
        throw "Math.clz32(-0) = " + value;
 | 
						|
    var value = Math.clz32(1);
 | 
						|
    if (value !== 31)
 | 
						|
        throw "Math.clz32(1) = " + value;
 | 
						|
    var value = Math.clz32(-1);
 | 
						|
    if (value !== 0)
 | 
						|
        throw "Math.clz32(-1) = " + value;
 | 
						|
    var value = Math.clz32(42);
 | 
						|
    if (value !== 26)
 | 
						|
        throw "Math.clz32(42) = " + value;
 | 
						|
    var value = Math.clz32(-42);
 | 
						|
    if (value !== 0)
 | 
						|
        throw "Math.clz32(-42) = " + value;
 | 
						|
    var value = Math.clz32(NaN);
 | 
						|
    if (value !== 32)
 | 
						|
        throw "Math.clz32(NaN) = " + value;
 | 
						|
    var value = Math.clz32(Number.POSITIVE_INFINITY);
 | 
						|
    if (value !== 32)
 | 
						|
        throw "Math.clz32(Number.POSITIVE_INFINITY) = " + value;
 | 
						|
    var value = Math.clz32(Number.NEGATIVE_INFINITY);
 | 
						|
    if (value !== 32)
 | 
						|
        throw "Math.clz32(Number.NEGATIVE_INFINITY) = " + value;
 | 
						|
    var value = Math.clz32(Math.E);
 | 
						|
    if (value !== 30)
 | 
						|
        throw "Math.clz32(Math.E) = " + value;
 | 
						|
}
 | 
						|
noInline(testMathClz32OnConstants);
 | 
						|
 | 
						|
for (var i = 0; i < 1e4; ++i) {
 | 
						|
    testMathClz32OnConstants();
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
// *** Struct transition. ***
 | 
						|
function mathClz32StructTransition(value)
 | 
						|
{
 | 
						|
    return Math.clz32(value);
 | 
						|
}
 | 
						|
noInline(mathClz32StructTransition);
 | 
						|
 | 
						|
for (var i = 0; i < 1e4; ++i) {
 | 
						|
    var value = mathClz32StructTransition(42);
 | 
						|
    if (value !== 26)
 | 
						|
        throw "mathClz32StructTransition(42) = " + value;
 | 
						|
}
 | 
						|
 | 
						|
Math.clz32 = function() { return arguments[0] + 5; }
 | 
						|
 | 
						|
var value = mathClz32StructTransition(42);
 | 
						|
if (value !== 47)
 | 
						|
    throw "mathClz32StructTransition(42) after transition = " + value;
 |