JSFiddle - React, Tailwind, and code Playground
HTML
<pre id="log-result">
Max size for Int8Array
</pre>
JavaScript
function log(message) {
if (typeof document !== 'undefined') {
document.getElementById('log-result').innerText += message + '\n';
} else {
console.log(message);
}
}
function fastSearch(prev, cur) {
console.log('Fast search:', cur);
try {
new Int8Array(cur);
setTimeout(fastSearch, 20, cur, cur * 2);
} catch (e) {
console.log(e);
console.log(e.name, e.message);
// console.log('Fast:', prev, '<= x <', cur);
log('Fast: ' + prev + ' <= x < ' + cur);
setTimeout(slowSearch, 20, prev + 1, cur);
}
}
function slowSearch(lower, upper) {
// lower - not checked yet
// upper - checked, guaranteed to fail
const delta = upper - lower;
if (delta <= 0) {
console.log('Slow search finished:', lower, upper);
log('Slow: ' + (upper - 1));
return;
}
// lower <= mid < upper
// const mid = lower + (delta >> 1); shift right has 32-bit limitation
const mid = lower + Math.trunc((upper - lower) / 2);
console.log('Slow search:', lower, mid, upper);
try {
new Int8Array(mid);
console.log('OK:', mid);
lower = mid + 1; // mid >= lower, mid + 1 > lower -> range decreases
} catch (e) {
console.log('Fail:', mid);
upper = mid; // mid < upper -> range decreases
}
setTimeout(slowSearch, 20, lower, upper);
}
function detectMaxArrayLength(n) {
fastSearch(n, n);
}
if (typeof navigator !== 'undefined') {
log(navigator.userAgent);
}
detectMaxArrayLength(32768);