Toggle navigation
MeasureThat.net
Create a benchmark
Tools
Feedback
FAQ
Register
Log In
Run results for:
Find version gaps in version spec strings
Go to the benchmark
Embed
Embed Benchmark Result
Run details:
User agent:
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36
Browser:
Chrome 127
Operating system:
Mac OS X 10.15.7
Device Platform:
Desktop
Date tested:
one year ago
Test name
Executions per second
Exhaustive list of version numbers
523.3 Ops/sec
Handle only specified ranges
1404526.5 Ops/sec
Script Preparation code:
var versionString = '1,3000000-2000000,2500000,3000000-3500000'; var validInputRegex = /^\s*(\d+(-\d+)?)(,\s*\d+(-\d+)?)*\s*$/;
Tests:
Exhaustive list of version numbers
function getVersionGaps(versions) { if (!versions || !versions.indexOf(',')) { return []; } const parsedVersions = parseVersions(versions); const gaps = []; // If the first version is greater than 1, there is a gap if (parsedVersions[0] > 1) { gaps.push({ start: 1, end: parsedVersions[0] - 1 }); } for (let i = 0; i < parsedVersions.length - 1; i++) { // If the difference between two consecutive versions is greater than 1, there is a gap if (parsedVersions[i + 1] - parsedVersions[i] > 1) { gaps.push({ start: parsedVersions[i] + 1, end: parsedVersions[i + 1] - 1 }); } } return gaps; } function parseVersions(versions) { // Check if the input string matches any of the expected formats if (!versions || versions.trim().length == 0 || versions === 'undefined') { return []; } if (!versions.match(validInputRegex)) { throw new Error(`Invalid input format. Expected format: '3' or '1,2,3' or '1-3'. Received: ${versions}`); } const result = []; const sections = versions.split(','); for (const section of sections) { if (section.includes('-')) { const [start, end] = section.split('-').map(Number); for (let i = start; i <= end; i++) { result.push(i); } } else { result.push(Number(section)); } } return result; } getVersionGaps(versionString);
Handle only specified ranges
function getVersionGaps(versions) { if (!versions || !versions.trim()) return []; const parsedVersions = parseVersionString(versions); return parsedVersions.reduce((gaps, current, index, arr) => { const prevEnd = index === 0 ? 0 : arr[index - 1].end; if (current.start > prevEnd + 1) { gaps.push({ start: prevEnd + 1, end: current.start - 1 }); } return gaps; }, []); } function parseVersionString(versionString) { const ranges = []; if (!versionString || !versionString.trim()) { return ranges; } const parts = versionString.split(','); for (const part of parts) { if (part.includes('-')) { const [start, end] = part.split('-').map(Number); ranges.push({start, end}); } else { const num = Number(part); ranges.push({start: num, end: num}); } } return optimizeRanges(ranges); } function optimizeRanges(ranges) { return ranges .sort((a, b) => a.start - b.start) .reduce((optimized, current) => { const last = optimized[optimized.length - 1]; if (!last || current.start > last.end + 1) { optimized.push(current); } else { last.end = Math.max(last.end, current.end); } return optimized; }, []); } getVersionGaps(versionString);