// Values around INT32_MAX.
2147483645.5,
2147483646.5,
2147483647.5,
];
// Test double input without an explicit radix. function testRadixAbsent() { for (let i = 0; i < 200; ++i) {
let x = doubleValues[i % doubleValues.length];
let y = x|0;
let r = Number.parseInt(x);
assertEq(r, y);
}
} for (let i = 0; i < 2; ++i) testRadixAbsent();
// Test double input with radix=10. function testRadixTen() { for (let i = 0; i < 200; ++i) {
let x = doubleValues[i % doubleValues.length];
let r = Number.parseInt(x, 10);
assertEq(r, x|0);
}
} for (let i = 0; i < 2; ++i) testRadixTen();
// Test double input in the exclusive range (0, 1.0e-6). function testBadTooSmallPositive() { const goodValues = [
+0, +0.5, +1.5, +2.5, +3.5, +4.5, +5.5,
-0, -1.5, -2.5, -3.5, -4.5, -5.5,
]; const badValues = [
9.999999999999997e-7, // parseInt(9.999999999999997e-7) is 9.
1e-7, // parseInt(1e-7) is 1.
];
const values = [
...goodValues,
...badValues,
];
for (let i = 0; i < 200; ++i) {
let xs = [goodValues, values][(i >= 150)|0];
let x = xs[i % xs.length];
let y; if (0 < x && x < 1e-6) {
y = (String(x).match(/(.*)e.*/)[1])|0;
} else {
y = x|0;
}
let r = Number.parseInt(x);
assertEq(r, y);
}
} for (let i = 0; i < 2; ++i) testBadTooSmallPositive();
// Test double input in the exclusive range (-1.0e-6, -0). function testBadTooSmallNegative() { const goodValues = [
+0, +0.5, +1.5, +2.5, +3.5, +4.5, +5.5,
-0, -1.5, -2.5, -3.5, -4.5, -5.5,
]; const badValues = [
-9.999999999999997e-7, // parseInt(-9.999999999999997e-7) is -9.
-1e-7, // parseInt(-1e-7) is -1.
];
const values = [
...goodValues,
...badValues,
];
for (let i = 0; i < 200; ++i) {
let xs = [goodValues, values][(i >= 150)|0];
let x = xs[i % xs.length];
let y; if (-1e-6 < x && x < -0) {
y = (String(x).match(/(.*)e.*/)[1])|0;
} else {
y = x|0;
}
let r = Number.parseInt(x);
assertEq(r, y);
}
} for (let i = 0; i < 2; ++i) testBadTooSmallNegative();
// Test double input in the exclusive range (-1, -1.0e-6). function testBadNegativeZero() { const goodValues = [
+0, +0.5, +1.5, +2.5, +3.5, +4.5, +5.5,
-0, -1.5, -2.5, -3.5, -4.5, -5.5,
]; const badValues = [
-0.1, // parseInt(-0.1) is -0.
-0.5, // parseInt(-0.5) is -0.
-0.9, // parseInt(-0.9) is -0.
];
const values = [
...goodValues,
...badValues,
];
for (let i = 0; i < 200; ++i) {
let xs = [goodValues, values][(i >= 150)|0];
let x = xs[i % xs.length];
let y; if (-1 < x && x < 0) {
y = -0;
} else {
y = x|0;
}
let r = Number.parseInt(x);
assertEq(r, y);
}
} for (let i = 0; i < 2; ++i) testBadNegativeZero();
// Test double input with infinity values. function testBadInfinity() { const goodValues = [
+0, +0.5, +1.5, +2.5, +3.5, +4.5, +5.5,
-0, -1.5, -2.5, -3.5, -4.5, -5.5,
]; const badValues = [
Infinity, // parseInt(Infinity) is NaN
-Infinity, // parseInt(-Infinity) is NaN
];
const values = [
...goodValues,
...badValues,
];
for (let i = 0; i < 200; ++i) {
let xs = [goodValues, values][(i >= 150)|0];
let x = xs[i % xs.length];
let y; if (!Number.isFinite(x)) {
y = NaN;
} else {
y = x|0;
}
let r = Number.parseInt(x);
assertEq(r, y);
}
} for (let i = 0; i < 2; ++i) testBadInfinity();
// Test double input with NaN values. function testBadNaN() { const goodValues = [
+0, +0.5, +1.5, +2.5, +3.5, +4.5, +5.5,
-0, -1.5, -2.5, -3.5, -4.5, -5.5,
]; const badValues = [
NaN, // parseInt(NaN) is NaN
];
const values = [
...goodValues,
...badValues,
];
for (let i = 0; i < 200; ++i) {
let xs = [goodValues, values][(i >= 150)|0];
let x = xs[i % xs.length];
let y; if (!Number.isFinite(x)) {
y = NaN;
} else {
y = x|0;
}
let r = Number.parseInt(x);
assertEq(r, y);
}
} for (let i = 0; i < 2; ++i) testBadNaN();
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.