'use strict';

// Check that spawn child doesn't create duplicated entries
const common = require('../common');

if (common.isPi()) {
  common.skip('Too slow for Raspberry Pi devices');
}

const kRepetitions = 2;
const assert = require('assert');
const fixtures = require('../common/fixtures');
const { promisify, debuglog } = require('util');
const debug = debuglog('test');

const { execFile } = require('child_process');
const execFilePromise = promisify(execFile);
const targetScript = fixtures.path('guess-hash-seed.js');

const requiredCallback = common.mustCall((results) => {
  const seeds = results.map((val) => val.stdout.trim());
  debug(`Seeds: ${seeds}`);
  assert.strictEqual(new Set(seeds).size, seeds.length);
  assert.strictEqual(seeds.length, kRepetitions);
});

function generateSeed() {
  return execFilePromise(process.execPath, [
    // Needed for %NeverOptimizeFunction.
    '--allow-natives-syntax',
    targetScript,
  ]);
}

const subprocesses = [...new Array(kRepetitions)].map(generateSeed);

Promise.all(subprocesses)
  .then(requiredCallback);
