blob: 2e6ddefb7e889d442da1a7b1cf217cb38c9e80b9 [file] [log] [blame]
<!doctype html>
<html>
<head>
<script src="../../http/tests/inspector/resources/inspector-test.js"></script>
<script>
function test()
{
// This is the floating point precision error value from: `0.3 - 0.2 - 0.1`
const superSmallValue = -2.7755575615628914e-17;
let suite = InspectorTest.createSyncSuite("NumberUtilities");
suite.addTestCase({
name: "Number.constrain",
test() {
InspectorTest.expectEqual(Number.constrain(0, -1, 1), 0, "constrain of a value between min and max does not change");
InspectorTest.expectEqual(Number.constrain(0.5, -1, 1), 0.5, "constrain of a value between min and max does not change");
InspectorTest.expectEqual(Number.constrain(1, -1, 1), 1, "constrain of a value between min and max does not change");
InspectorTest.expectEqual(Number.constrain(-1, -1, 1), -1, "constrain of a value between min and max does not change");
InspectorTest.expectEqual(Number.constrain(-1.01, -1, 1), -1, "constrain of a value below min becomes min");
InspectorTest.expectEqual(Number.constrain(-2, -1, 1), -1, "constrain of a value below min becomes min");
InspectorTest.expectEqual(Number.constrain(-Infinity, -1, 1), -1, "constrain of a value below min becomes min");
InspectorTest.expectEqual(Number.constrain(1.01, -1, 1), 1, "constrain of a value above max becomes max");
InspectorTest.expectEqual(Number.constrain(2, -1, 1), 1, "constrain of a value above max becomes max");
InspectorTest.expectEqual(Number.constrain(Infinity, -1, 1), 1, "constrain of a value above max becomes max");
InspectorTest.expectEqual(Number.constrain(NaN, -1, 1), -1, "constrain of NaN becomes min");
return true;
}
});
suite.addTestCase({
name: "Number.secondsToString",
test() {
// Normal resolution.
InspectorTest.expectEqual(Number.secondsToString(0, false), "0ms", "normal resolution of 0ms should be ms with no decimals");
InspectorTest.expectEqual(Number.secondsToString(0.000123456, false), "0.12ms", "normal resolution of sub 1ms should be ms");
InspectorTest.expectEqual(Number.secondsToString(0.00123456, false), "1.23ms", "normal resolution of sub 10ms should be ms");
InspectorTest.expectEqual(Number.secondsToString(0.0123456, false), "12.3ms", "normal resolution of sub 100ms should be ms");
InspectorTest.expectEqual(Number.secondsToString(0.123456, false), "123ms", "normal resolution of greater than 100ms but sub 1s should be ms");
InspectorTest.expectEqual(Number.secondsToString(1.123456, false), "1.12s", "normal resolution of greater than 1s but sub 1min should be seconds");
InspectorTest.expectEqual(Number.secondsToString(30.123456, false), "30.12s", "normal resolution of greater than 1s but sub 1min should be seconds");
InspectorTest.expectEqual(Number.secondsToString(60.123456, false), "1.0min", "normal resolution of greater than 1min but sub 1hr should be minutes");
InspectorTest.expectEqual(Number.secondsToString(100.123456, false), "1.7min", "normal resolution of greater than 1min but sub 1hr should be minutes");
InspectorTest.expectEqual(Number.secondsToString(12345, false), "3.4hrs", "normal resolution of greater than 1hr but sub 1 day should be hrs");
InspectorTest.expectEqual(Number.secondsToString(123456, false), "1.4 days", "normal resolution of greater than 1 day should be days");
InspectorTest.expectEqual(Number.secondsToString(1234567, false), "14.3 days", "normal resolution of greater than 1 day should be days");
InspectorTest.expectEqual(Number.secondsToString(superSmallValue, false), "0ms", "normal resolution of super small value should be ms with no decimals");
// High resolution.
InspectorTest.expectEqual(Number.secondsToString(0, true), "0ms", "high resolution of 0ms should be ms with no decimals");
InspectorTest.expectEqual(Number.secondsToString(0.000123456, true), "0.123ms", "high resolution of sub 1ms should be ms with decimals");
InspectorTest.expectEqual(Number.secondsToString(0.00123456, true), "1.235ms", "high resolution of sub 10ms should be ms with decimals");
InspectorTest.expectEqual(Number.secondsToString(0.0123456, true), "12.35ms", "high resolution of sub 100ms should be ms with decimals");
InspectorTest.expectEqual(Number.secondsToString(0.123456, true), "123.5ms", "high resolution of greater than 100ms but sub 1s should be ms with decimals");
InspectorTest.expectEqual(Number.secondsToString(1.123456, true), "1.12s", "high resolution of greater than 1s should be seconds with decimals");
InspectorTest.expectEqual(Number.secondsToString(30.123456, true), "30.12s", "high resolution of greater than 1s should be seconds with decimals");
InspectorTest.expectEqual(Number.secondsToString(60.123456, true), "60.12s", "high resolution of greater than 1s should be seconds with decimals");
InspectorTest.expectEqual(Number.secondsToString(100.123456, true), "100.12s", "high resolution greater than 1s should be seconds with decimals");
InspectorTest.expectEqual(Number.secondsToString(superSmallValue, true), "0ms", "high resolution of super small value should be ms with no decimals");
return true;
}
});
suite.addTestCase({
name: "Number.bytesToString",
test() {
const kb = 1000;
const mb = kb * 1000;
// Normal resolution.
InspectorTest.expectEqual(Number.bytesToString(123, false), "123 B", "normal resolution of sub 1k should be bytes");
InspectorTest.expectEqual(Number.bytesToString(1.23 * kb, false), "1.23 KB", "normal resolution of sub 10k should be kilobytes");
InspectorTest.expectEqual(Number.bytesToString(10.123 * kb, false), "10.1 KB", "normal resolution of sub 10k should be kilobytes");
InspectorTest.expectEqual(Number.bytesToString(1.123 * mb, false), "1.12 MB", "normal resolution of sub 10mb should be megabytes");
InspectorTest.expectEqual(Number.bytesToString(10.123 * mb, false), "10.1 MB", "normal resolution of greater than 10mb should be megabytes");
// High resolution.
InspectorTest.expectEqual(Number.bytesToString(123, true), "123 B", "high resolution of sub 1k should be bytes");
InspectorTest.expectEqual(Number.bytesToString(1.23 * kb, true), "1.23 KB", "high resolution of sub 10k should be kilobytes");
InspectorTest.expectEqual(Number.bytesToString(10.123 * kb, true), "10.12 KB", "high resolution of sub 10k should be kilobytes");
InspectorTest.expectEqual(Number.bytesToString(1.123 * mb, true), "1.12 MB", "high resolution of sub 10mb should be megabytes");
InspectorTest.expectEqual(Number.bytesToString(10.123 * mb, true), "10.12 MB", "high resolution of greater than 10mb should be megabytes");
return true;
}
});
suite.addTestCase({
name: "Number.percentageString",
test() {
InspectorTest.expectEqual(Number.percentageString(1 / 3), "33.3%", "precision should default to 1 if unspecified");
return true;
}
});
suite.addTestCase({
name: "Number.zeroPad",
test() {
InspectorTest.expectEqual(Number.zeroPad(1, 0), "1", "padding of 0 should add no zeros");
InspectorTest.expectEqual(Number.zeroPad(1, 1), "1", "padding of 1 with one digit should add no zeros");
InspectorTest.expectEqual(Number.zeroPad(1, 2), "01", "padding of 2 with one digit should add one zero");
InspectorTest.expectEqual(Number.zeroPad(10, 1), "10", "padding of 1 with two digits should add no zeros");
InspectorTest.expectEqual(Number.zeroPad(10, 2), "10", "padding of 2 with two digits should add no zeros");
InspectorTest.expectEqual(Number.zeroPad(10, 3), "010", "padding of 3 with two digits should add one zero");
InspectorTest.expectEqual(Number.zeroPad(10, 4), "0010", "padding of 4 with two digits should add two zeros");
InspectorTest.expectEqual(Number.zeroPad(1.1, 2), "1.1", "padding of 2 with one decimal should add no zeros");
InspectorTest.expectEqual(Number.zeroPad(1.1, 3), "1.1", "padding of 3 with one decimal should add no zeros");
InspectorTest.expectEqual(Number.zeroPad(1.1, 4), "01.1", "padding of 4 with one decimal should add one zero");
return true;
}
});
suite.addTestCase({
name: "Number.countDigits",
test() {
InspectorTest.expectEqual(Number.countDigits(0), 1, "0 should have 1 digit");
InspectorTest.expectEqual(Number.countDigits(-0), 1, "-0 should have 1 digit");
for (let i = 1; i < 10; ++i) {
let digits = i + 1;
let num = 10 ** i;
InspectorTest.expectEqual(Number.countDigits(num), digits, `${num} should have ${digits} digits`);
InspectorTest.expectEqual(Number.countDigits(-num), digits, `${-num} should have ${digits} digits`);
}
return true;
}
});
suite.addTestCase({
name: "Number.prototype.maxDecimals",
test() {
const n = 123.456;
InspectorTest.expectEqual(n.maxDecimals(-4), 0, "maxDecimals with a negative argument more than the number of digits should be 0");
InspectorTest.expectEqual(n.maxDecimals(-3), 0, "maxDecimals with a negative argument more equal to the number of digits should be 0");
InspectorTest.expectEqual(n.maxDecimals(-2), 100, "maxDecimals with -2 should truncate that 2 units in front of the decimal");
InspectorTest.expectEqual(n.maxDecimals(-1), 120, "maxDecimals with -1 should truncate that 1 units in front of the decimal");
InspectorTest.expectEqual(n.maxDecimals(0), 123, "maxDecimals with 0 should round the value");
InspectorTest.expectEqual(n.maxDecimals(1), 123.5, "maxDecimals with 1 should round after the 1st decimal");
InspectorTest.expectEqual(n.maxDecimals(2), 123.46, "maxDecimals with 2 should round after the 2nd decimal");
InspectorTest.expectEqual(n.maxDecimals(3), 123.456, "maxDecimals with a positive argument equal to the number of digits should not modify the number");
InspectorTest.expectEqual(n.maxDecimals(4), 123.456, "maxDecimals with a positive argument greater than the number of digits should not modify the number");
},
});
suite.runTestCasesAndFinish();
}
</script>
</head>
<body onLoad="runTest()">
</body>
</html>