diff options
Diffstat (limited to 'js/src/jit-test/tests/cacheir/number-parseInt-int32.js')
-rw-r--r-- | js/src/jit-test/tests/cacheir/number-parseInt-int32.js | 93 |
1 files changed, 93 insertions, 0 deletions
diff --git a/js/src/jit-test/tests/cacheir/number-parseInt-int32.js b/js/src/jit-test/tests/cacheir/number-parseInt-int32.js new file mode 100644 index 0000000000..42def800de --- /dev/null +++ b/js/src/jit-test/tests/cacheir/number-parseInt-int32.js @@ -0,0 +1,93 @@ +// Test inlining parseInt with an Int32 input. + +const int32Values = [ + // Values around INT32_MIN. + -2147483648, + -2147483647, + -2147483646, + + // Negative values. + -65536, -65535, -256, -255, -100, -50, -10, + + // Values around zero. + -2, -1, 0, 1, 2, + + // Positive values. + 10, 50, 100, 255, 256, 65535, 65536, + + // Values around INT32_MAX. + 2147483645, + 2147483646, + 2147483647, +]; + +// Test int32 input without an explicit radix. +function testRadixAbsent() { + for (let i = 0; i < 200; ++i) { + let x = int32Values[i % int32Values.length]; + assertEq(x, x|0, "x is an int32 value"); + + let r = Number.parseInt(x); + assertEq(r, x); + } +} +for (let i = 0; i < 2; ++i) testRadixAbsent(); + +// Test int32 input with radix=10. +function testRadixTen() { + for (let i = 0; i < 200; ++i) { + let x = int32Values[i % int32Values.length]; + assertEq(x, x|0, "x is an int32 value"); + + let r = Number.parseInt(x, 10); + assertEq(r, x); + } +} +for (let i = 0; i < 2; ++i) testRadixTen(); + +// Test int32 input with radix=16. (This case isn't currently inlined.) +function testRadixSixteen() { + for (let i = 0; i < 200; ++i) { + let x = int32Values[i % int32Values.length]; + assertEq(x, x|0, "x is an int32 value"); + + let expected = Math.sign(x) * Number("0x" + Math.abs(x).toString(10)); + + let r = Number.parseInt(x, 16); + assertEq(r, expected); + } +} +for (let i = 0; i < 2; ++i) testRadixSixteen(); + +// Test with variable radix. +function testRadixVariable() { + for (let i = 0; i < 200; ++i) { + let x = int32Values[i % int32Values.length]; + assertEq(x, x|0, "x is an int32 value"); + + let radix = [10, 16][(i > 100)|0]; + + let expected = x; + if (radix === 16) { + expected = Math.sign(x) * Number("0x" + Math.abs(x).toString(10)); + } + + let r = Number.parseInt(x, radix); + assertEq(r, expected); + } +} +for (let i = 0; i < 2; ++i) testRadixVariable(); + +// Test with int32 and double inputs. +function testBadInput() { + for (let i = 0; i < 200; ++i) { + let x = int32Values[i % int32Values.length]; + assertEq(x, x|0, "x is an int32 value"); + + let y = [x, NaN][(i > 150)|0]; + + let r = Number.parseInt(y, 10); + assertEq(r, y); + } +} +for (let i = 0; i < 2; ++i) testBadInput(); |