function fuzzyString(budget, random) {
  const length = Math.floor(budget * random());
  const partition = random();
  // Evidently, not every combination of UTF-16 values can survive a
  // round-trip through encode/decode unaltered.
  // if (partition < 0.125) {
  //   // string with lots of unicode
  //   return Array(length)
  //     .fill()
  //     .map(() => String.fromCharCode(random() * random() * 65536))
  //     .join('');
  if (partition < 0.25) {
    // Force common prefix case to be somewhat common.
    return '';
  } else if (partition < 0.5) {
    // string mostly printable
    return Array(length)
      .fill(undefined)
      .map(() => String.fromCharCode(random() * 128))
      .join('');
  } else {
    // lower-case strings
    return Array(length)
      .fill(undefined)
      .map(() => String.fromCharCode('a'.charCodeAt(0) + random() * 26))
      .join('');
  }
}
@param {number} budget
@param {() => number} random