const UNITS = [ "year", "quarter", "month", "week", "day", "hour", "minute", "second", ]; function* relativeTimeFormatOptions() { const styleOptions = ["long", "short", "narrow"]; const numericOptions = ["always", "auto"]; for (const locale of LOCALES) { for (const style of styleOptions) { for (const numeric of numericOptions) { yield { locale, style, numeric }; } } } } function runTest(verbose = false) { let lastResult; let totalLength = 0; const RELATIVE_TIME_FORMAT_COUNT = 100; let unitIndex = 0; for (const { locale, style, numeric } of shuffleOptions( relativeTimeFormatOptions )) { const options = { style, numeric }; if (verbose) { console.log(locale, JSON.stringify(options)); } const formatter = new Intl.RelativeTimeFormat(locale, options); for (let i = 0; i < RELATIVE_TIME_FORMAT_COUNT; i++) { const unit = UNITS[unitIndex % UNITS.length]; unitIndex++; const value = Math.random() * 100 - 50; lastResult = formatter.format(value, unit); if (verbose) { console.log(value, unit, lastResult); } totalLength += lastResult.length; const formatPartsResult = formatter.formatToParts(value, unit); for (const part of formatPartsResult) { totalLength += part.value.length; } } } return { lastResult, totalLength, expectedMinLength: 432_000 }; }