jestjs/jest · error · ValidationError

seed value must be `-0x80000000` and `0x7fffffff` inclusive

Error message

seed value must be `-0x80000000` and `0x7fffffff` inclusive - instead it is ${newOptions.seed}

What it means

normalize (packages/jest-config/src/normalize.ts:1132) validates the `seed` value against the signed 32-bit range used by the xoroshiro128plus PRNG that V8 (and Jest) rely on. The accepted bounds are -2147483648 (-0x80000000) through 2147483647 (0x7fffffff) inclusive; anything outside throws a ValidationError. The seed drives test-order randomization when `--randomize` is used.

Source

Thrown at packages/jest-config/src/normalize.ts:1136

    newOptions.onlyChanged = newOptions.watch;
  }

  newOptions.randomize = newOptions.randomize || argv.randomize;

  newOptions.showSeed =
    newOptions.randomize || newOptions.showSeed || argv.showSeed;

  const upperBoundSeedValue = 2 ** 31;

  // bounds are determined by xoroshiro128plus which is used in v8 and is used here (at time of writing)
  newOptions.seed =
    argv.seed ??
    Math.floor((2 ** 32 - 1) * Math.random() - upperBoundSeedValue);
  if (
    newOptions.seed < -upperBoundSeedValue ||
    newOptions.seed > upperBoundSeedValue - 1
  ) {
    throw new ValidationError(
      'Validation Error',
      `seed value must be between \`-0x80000000\` and \`0x7fffffff\` inclusive - instead it is ${newOptions.seed}`,
    );
  }

  if (!newOptions.onlyChanged) {
    newOptions.onlyChanged = false;
  }

  if (!newOptions.lastCommit) {
    newOptions.lastCommit = false;
  }

  if (!newOptions.onlyFailures) {
    newOptions.onlyFailures = false;
  }

  if (!newOptions.watchAll) {

View on GitHub (pinned to f49721c78e)

Solutions

  1. Use a seed within [-2147483648, 2147483647], e.g. `--seed 12345`.
  2. If deriving a seed programmatically, mask it into range: `seed & 0xffffffff` then interpret as signed, or use `Math.floor(Math.random() * 0x100000000) - 0x80000000`.
  3. Omit `--seed` entirely to let Jest generate a valid random seed.

Example fix

# before
jest --randomize --seed 9000000000

# after
jest --randomize --seed 12345
Defensive patterns

Strategy: validation

Validate before calling

const SEED_MIN = -0x80000000;
const SEED_MAX = 0x7fffffff;
function validateSeed(seed: number): number {
  if (!Number.isInteger(seed) || seed < SEED_MIN || seed > SEED_MAX) {
    throw new RangeError(`seed must be an integer in [${SEED_MIN}, ${SEED_MAX}]`);
  }
  return seed;
}

Type guard

const isValidSeed = (n: unknown): n is number =>
  typeof n === 'number' && Number.isInteger(n) && n >= -0x80000000 && n <= 0x7fffffff;

Prevention

When it happens

Trigger: Passing `--seed 9999999999` or `--seed -3000000000`, or setting `seed` in config/argv to a value beyond the 32-bit signed range.

Common situations: Copying a seed from another tool that uses a wider integer; programmatically generating a seed with a large random number; passing a value parsed from an env var as a number.

Related errors


AI-assisted analysis of jestjs/jest@f49721c78e (2026-08-03). Data as JSON: /data/errors/6fadc3be41d1015c.json. Report an issue: GitHub.