| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 | var test = require('tape')var crypto = require('../')var randomBytesFunctions = {  randomBytes: require('randombytes'),  pseudoRandomBytes: crypto.pseudoRandomBytes}for (var randomBytesName in randomBytesFunctions) {  // Both randomBytes and pseudoRandomBytes should provide the same interface  var randomBytes = randomBytesFunctions[randomBytesName]  test('get error message', function (t) {    try {      var b = randomBytes(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(randomBytesName, function (t) {    t.plan(5)    t.equal(randomBytes(10).length, 10)    t.ok(Buffer.isBuffer(randomBytes(10)))    randomBytes(10, function (ex, bytes) {      t.error(ex)      t.equal(bytes.length, 10)      t.ok(Buffer.isBuffer(bytes))      t.end()    })  })  test(randomBytesName + ' seem random', function (t) {    var L = 1000    var b = randomBytes(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()  })}
 |