| // Original test case. |
| function isNaNOnDouble(value) |
| { |
| return (+value) !== value; |
| } |
| noInline(isNaNOnDouble); |
| |
| function testIsNaNOnDoubles() |
| { |
| 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; |
| } |
| noInline(testIsNaNOnDoubles); |
| |
| for (let i = 0; i < 1e6; ++i) { |
| testIsNaNOnDoubles(); |
| } |
| |
| // Simplified test case. |
| function isNaNOnDouble2(value) |
| { |
| let valueToNumber = (+value); |
| return valueToNumber !== valueToNumber; |
| } |
| noInline(isNaNOnDouble2); |
| |
| // Warm up without NaN. |
| for (let i = 0; i < 1e6; ++i) { |
| if (isNaNOnDouble2(1.5)) |
| throw "Failed isNaNOnDouble(1.5)"; |
| } |
| |
| // Then pass some NaNs. |
| for (let i = 0; i < 1e6; ++i) { |
| if (!isNaNOnDouble2(NaN)) |
| throw "Failed isNaNOnDouble(NaN)"; |
| } |