| 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; |