Random Number Generator "Randomness" Check?

Open
#21 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Assessment

Difficulty
3/5
Estimated time
1-2 days
Newbie friendliness
25/100
Issue type
Feature
Clarity
Needs clarification
Activity status
Stale
Tech stack
javascript
Domain
testing

Research direction

Start by locating the get_random_int function in the repository and run the JavaScript loop shown in the issue with the stated range and test count. The issue does not identify a file, test location, or requested repository change; clarify whether the distribution check should be added or documented before defining what done means.

Written by the indexing model from the issue text.

Description

enhancement question

Given the following "Random Integer between range X and Y" function:

/**
 * Returns a random integer between min (inclusive) and max (inclusive)
 * Using Math.round() will give you a non-uniform distribution!
 * from: http://stackoverflow.com/a/1527820/1148249
 */
function get_random_int(min, max) {
    return Math.floor(Math.random() * (max - min + 1)) + min;
}

We can run the following test to confirm the randomness:

var i = 0; // counter for looping.
var results = {}; // store the results of running get_random_int
var min = 0;
var max = 9;
for(i = min; i <= max; i++) {
  results[i] = 0; // initialize results to zero;
}
i = 0; // reset/reuse i counter.
var test_count = 10000000;
while(i < test_count) {
  var r = get_random_int(min, max);
  results[r]++; // increment the count for a given random number
  i++;
}
Object.keys(results).forEach(function(k) {
  results[k] = results[k].toString() + ' > ' + (results[k] / test_count * 100).toFixed(3) + ' %';
});
console.log(JSON.stringify(results, null, 2));

Which outputs:

{
  "0": "1000900 > 10.009 %",
  "1": "999727 > 9.997 %",
  "2": "999742 > 9.997 %",
  "3": "999268 > 9.993 %",
  "4": "1000650 > 10.007 %",
  "5": "998621 > 9.986 %",
  "6": "1000241 > 10.002 %",
  "7": "1000716 > 10.007 %",
  "8": "1000151 > 10.002 %",
  "9": "999984 > 10.000 %"
}

Which is a pretty decent distribution...

Dominant language
HTML
Stars
65
Forks
15
PR merge metrics
No merged PRs in 30d

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from dwyl/learn-javascript

All issues in dwyl/learn-javascript

Similar issues

More Testing & QA issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.