'use strict'; 
 | 
var $ = require('../internals/export'); 
 | 
var anObject = require('../internals/an-object'); 
 | 
var numberIsFinite = require('../internals/number-is-finite'); 
 | 
var createIteratorConstructor = require('../internals/iterator-create-constructor'); 
 | 
var createIterResultObject = require('../internals/create-iter-result-object'); 
 | 
var InternalStateModule = require('../internals/internal-state'); 
 | 
  
 | 
var SEEDED_RANDOM = 'Seeded Random'; 
 | 
var SEEDED_RANDOM_GENERATOR = SEEDED_RANDOM + ' Generator'; 
 | 
var SEED_TYPE_ERROR = 'Math.seededPRNG() argument should have a "seed" field with a finite value.'; 
 | 
var setInternalState = InternalStateModule.set; 
 | 
var getInternalState = InternalStateModule.getterFor(SEEDED_RANDOM_GENERATOR); 
 | 
var $TypeError = TypeError; 
 | 
  
 | 
var $SeededRandomGenerator = createIteratorConstructor(function SeededRandomGenerator(seed) { 
 | 
  setInternalState(this, { 
 | 
    type: SEEDED_RANDOM_GENERATOR, 
 | 
    seed: seed % 2147483647 
 | 
  }); 
 | 
}, SEEDED_RANDOM, function next() { 
 | 
  var state = getInternalState(this); 
 | 
  var seed = state.seed = (state.seed * 1103515245 + 12345) % 2147483647; 
 | 
  return createIterResultObject((seed & 1073741823) / 1073741823, false); 
 | 
}); 
 | 
  
 | 
// `Math.seededPRNG` method 
 | 
// https://github.com/tc39/proposal-seeded-random 
 | 
// based on https://github.com/tc39/proposal-seeded-random/blob/78b8258835b57fc2100d076151ab506bc3202ae6/demo.html 
 | 
$({ target: 'Math', stat: true, forced: true }, { 
 | 
  seededPRNG: function seededPRNG(it) { 
 | 
    var seed = anObject(it).seed; 
 | 
    if (!numberIsFinite(seed)) throw new $TypeError(SEED_TYPE_ERROR); 
 | 
    return new $SeededRandomGenerator(seed); 
 | 
  } 
 | 
}); 
 |