var test = require('tape')
var crypto = require('../')
var Buffer = require('safe-buffer').Buffer

test('get error message', function (t) {
  try {
    var b = crypto.randomFillSync(Buffer.alloc(10))
    t.ok(Buffer.isBuffer(b))
    t.end()
  } catch (err) {
    t.ok(/not supported/.test(err.message), '"not supported"  is in error message')
    t.end()
  }
})

test('randomfill', function (t) {
  t.plan(5)
  t.equal(crypto.randomFillSync(Buffer.alloc(10)).length, 10)
  t.ok(Buffer.isBuffer(crypto.randomFillSync(Buffer.alloc(10))))
  crypto.randomFill(Buffer.alloc(10), function (ex, bytes) {
    t.error(ex)
    t.equal(bytes.length, 10)
    t.ok(Buffer.isBuffer(bytes))
    t.end()
  })
})

test('seems random', function (t) {
  var L = 1000
  var b = crypto.randomFillSync(Buffer.alloc(L))

  var mean = [].reduce.call(b, function (a, b) {
    return a + b
  }, 0) / L

  // test that the random numbers are plausably random.
  // Math.random() will pass this, but this will catch
  // terrible mistakes such as this blunder:
  // https://github.com/dominictarr/crypto-browserify/commit/3267955e1df7edd1680e52aeede9a89506ed2464#commitcomment-7916835

  // this doesn't check that the bytes are in a random *order*
  // but it's better than nothing.

  var expected = 256 / 2
  var smean = Math.sqrt(mean)

  // console.log doesn't work right on testling, *grumble grumble*
  console.log(JSON.stringify([expected - smean, mean, expected + smean]))
  t.ok(mean < expected + smean)
  t.ok(mean > expected - smean)

  t.end()
})
