🏡 index : cold-air-networks/mirror-jetstream.git

function generateRandomDates(count) {
  const firstDate = new Date(1800, 11, 5, 13, 6);
  let currentTimeStamp = firstDate.getTime();
  const dates = [];

  for (let i = 0; i < count; i++) {
    dates.push(new Date(currentTimeStamp));
    currentTimeStamp += 1234569;
  }
  return dates;
}

const DATE_STYLE_OPTIONS = ["full", "long", "medium", "short"];
const TIME_STYLE_OPTIONS = ["full", "long", "medium", "short"];

function* dateTimeFormatOptions() {
  for (const locale of LOCALES) {
    for (const dateStyle of DATE_STYLE_OPTIONS) {
      for (const timeStyle of TIME_STYLE_OPTIONS) {
        yield { locale, dateStyle, timeStyle };
      }
    }
  }
}

function runTest(verbose = false) {
  let totalLength = 0;
  let lastFormatResult;
  let lastFormatPartResult;
  let lastFormatRangeResult;
  const dates = generateRandomDates(100);
  let dateIndex = 0;

  const FORMAT_COUNT = 17;
  const FORMAT_RANGE_COUNT = 7;
  for (const { locale, dateStyle, timeStyle } of shuffleOptions(
    dateTimeFormatOptions
  )) {
    const options = { dateStyle, timeStyle };
    if (verbose) {
      console.log(locale, JSON.stringify(options));
    }
    const formatter = new Intl.DateTimeFormat(locale, options);
    for (let i = 0; i < FORMAT_COUNT; i++) {
      let date = dates[dateIndex % dates.length];
      lastFormatResult = formatter.format(date);
      totalLength += lastFormatResult.length;
      if (verbose) {
        console.log(date, lastFormatResult);
      }
      dateIndex++;

      date = dates[dateIndex % dates.length];
      lastFormatPartResult = formatter.formatToParts(date);
      for (const part of lastFormatPartResult) {
        totalLength += part.value.length;
      }
      dateIndex++;
    }
    let dateRangeStart = dates[0];
    for (let i = 0; i < FORMAT_RANGE_COUNT; i++) {
      const date = dates[dateIndex % dates.length];
      if (dateRangeStart < date) {
        lastFormatRangeResult = formatter.formatRange(dateRangeStart, date);
        if (verbose) {
          console.log(dateRangeStart, date, lastFormatRangeResult);
        }
      }
      dateRangeStart = date;
    }
  }
  return {
    lastResult: lastFormatResult + lastFormatRangeResult,
    totalLength,
    expectedMinLength: 438_000,
  };
}