| function isNaNOnDouble(value) |
| return (+value) !== value; |
| function testIsNaNOnDoubles() |
| var value = isNaNOnDouble(-0); |
| throw "isNaNOnDouble(-0) = " + value; |
| var value = isNaNOnDouble(NaN); |
| throw "isNaNOnDouble(NaN) = " + value; |
| var value = isNaNOnDouble(Number.POSITIVE_INFINITY); |
| throw "isNaNOnDouble(Number.POSITIVE_INFINITY) = " + value; |
| noInline(testIsNaNOnDoubles); |
| for (let i = 0; i < 1e6; ++i) { |
| function isNaNOnDouble2(value) |
| let valueToNumber = (+value); |
| return valueToNumber !== valueToNumber; |
| noInline(isNaNOnDouble2); |
| for (let i = 0; i < 1e6; ++i) { |
| throw "Failed isNaNOnDouble(1.5)"; |
| for (let i = 0; i < 1e6; ++i) { |
| if (!isNaNOnDouble2(NaN)) |
| throw "Failed isNaNOnDouble(NaN)"; |