import Mt19937 from './Mt19937.js'
import Xoroshiro128plus from './Xoroshiro128plus.js'
import Xorshift32 from './Xorshift32.js'
import * as time from '../../time.js'

const DIAMETER = 300
const NUMBERS = 10000

function runPRNG (name, Gen) {
  console.log('== ' + name + ' ==')
  const gen = new Gen(1234)
  let head = 0
  let tails = 0
  const date = time.getUnixTime()
  const canvas = document.createElement('canvas')
  canvas.height = DIAMETER
  canvas.width = DIAMETER
  const ctx = canvas.getContext('2d')
  const vals = new Set()
  ctx.fillStyle = 'blue'
  for (let i = 0; i < NUMBERS; i++) {
    const n = gen.next() & 0xFFFFFF
    const x = (gen.next() >>> 0) % DIAMETER
    const y = (gen.next() >>> 0) % DIAMETER
    ctx.fillRect(x, y, 1, 2)
    if ((n & 1) === 1) {
      head++
    } else {
      tails++
    }
    if (vals.has(n)) {
      console.warn(`The generator generated a duplicate`)
    }
    vals.add(n)
  }
  console.log('time: ', time.getUnixTime() - date)
  console.log('head:', head, 'tails:', tails)
  console.log('%c       ', `font-size: 200px; background: url(${canvas.toDataURL()}) no-repeat;`)
  const h1 = document.createElement('h1')
  h1.insertBefore(document.createTextNode(name), null)
  document.body.insertBefore(h1, null)
  document.body.appendChild(canvas)
}

runPRNG('mt19937', Mt19937)
runPRNG('xoroshiro128plus', Xoroshiro128plus)
runPRNG('xorshift32', Xorshift32)