Is the wheel random? We spun it 1,000,000 times
A transparent test of Wheelova's spin code: the results, the statistics, and the raw data so you can check our work.
Short answer: yes. Across 3,000,000 simulated spins on 2, 6 and 10-entry wheels, every entry won almost exactly as often as chance predicts, no result made the next one more or less likely, and streaks appeared at the rate probability says they should. All three wheels passed the standard chi-square test. The method, the code and the raw spin data are below.
What we tested
When you press Spin, Wheelova asks your browser's crypto.getRandomValues() for a random number. That number decides how far past six full turns the wheel travels, and the winner is whichever slice stops under the pointer. According to MDN Web Docs, browsers implement this function as a cryptographically secure pseudo-random generator.
We copied that spin math exactly from the live site's code, including how the wheel's resting position carries over from one spin to the next, and ran it 1,000,000 times each on three wheels: 2 entries (like a yes or no wheel), 6 entries (like a die) and 10 entries (like a class name picker). The test ran in Node.js 22, which provides the same Web Crypto getRandomValues() function as browsers.
Result 1: every entry wins equally often
On the 10-entry wheel, each entry should win 100,000 times out of 1,000,000. The real counts ranged from 99,417 to 100,657, all within 0.657% of the expected number.
Perfectly equal counts would actually be suspicious: real randomness always wobbles a little. The shaded band shows the range where about 95% of entries land by chance alone. One entry sits just outside it, which is expected: with 10 entries, at least one lands outside a 95% band about 40% of the time. The chi-square test below checks all entries together, which is the fair way to judge.
Exact win counts for the 10-entry wheel
| Entry | Wins | vs expected |
|---|---|---|
| Entry 1 | 100,118 | +0.12% |
| Entry 2 | 100,657 | +0.66% |
| Entry 3 | 99,417 | -0.58% |
| Entry 4 | 99,789 | -0.21% |
| Entry 5 | 99,652 | -0.35% |
| Entry 6 | 100,562 | +0.56% |
| Entry 7 | 100,170 | +0.17% |
| Entry 8 | 99,464 | -0.54% |
| Entry 9 | 100,136 | +0.14% |
| Entry 10 | 100,035 | +0.03% |
Result 2: the chi-square test passes on every wheel
The chi-square goodness-of-fit test measures whether a set of counts differs from equal by more than chance would explain. A p-value above 0.05 means no evidence of bias. All three wheels passed.
| Wheel | Spins | Expected per entry | Actual range | Chi-square | p-value | Result |
|---|---|---|---|---|---|---|
| 2 entries | 1,000,000 | 500,000 | 499,629 – 500,371 | 0.55 (df 1) | 0.458 | Pass |
| 6 entries | 1,000,000 | 166,666 | 165,897 – 167,442 | 9.06 (df 5) | 0.107 | Pass |
| 10 entries | 1,000,000 | 100,000 | 99,417 – 100,657 | 16.03 (df 9) | 0.066 | Pass |
A p-value is not a "randomness score": values anywhere between 0.05 and 1 are normal for a fair wheel, and running the test again gives a different value each time.
Result 3: the last spin doesn't affect the next
A fair wheel has no memory. We counted every pair of back-to-back results (which entry followed which) and tested whether any pairing came up more than chance allows. None did: the 10-entry wheel scored p = 0.674, the 6-entry wheel p = 0.55 and the 2-entry wheel p = 0.391.
The same result came up twice in a row 10.02% of the time with 10 entries (expected 10%), 16.64% with 6 entries (expected 16.67%) and 49.96% with 2 entries (expected 50%).
Result 4: streaks happen exactly as often as they should
People often think a wheel is rigged when it lands on the same answer several times in a row. On a 50/50 wheel, long streaks are a normal part of randomness. Here is what 1,000,000 spins of a 2-entry wheel produced, against what probability predicts:
| Streak of the same result | Times it happened | Expected by probability |
|---|---|---|
| 5 or more in a row | 31,199 | about 31,250 |
| 10 or more in a row | 944 | about 977 |
| 15 or more in a row | 27 | about 31 |
| Longest streak | 19 | typically around 19–20 in a million spins |
So if your yes or no wheel says "Yes" five times running, that is not a glitch. It happens about once every 16 attempts at a fresh streak.
What this test does not show
- It tests the spin logic, not your screen. We ran the same code and random source the wheel uses, without drawing the animation. The animation only displays a result that has already been decided by the random number.
- It does not stop people from rigging the list. Typing an entry twice gives it two slices and twice the chance. For public draws, show the full list before you spin. See our FAQ on fairness.
- It is not a certification. Wheelova is built for classrooms, games, giveaways and decisions. It is not a certified lottery or gambling system.
- Results vary run to run. Running the test again gives slightly different counts and p-values. That is what randomness looks like.
Check it yourself
You don't have to take our word for it. Download the test script and run it with Node.js 18 or newer, or analyse our raw results in any spreadsheet or statistics tool.
- Test script (JavaScript, 1 KB): the exact spin math from Wheelova's code.
- Raw results, 10-entry wheel (1 MB): one digit per spin, 0 = first entry.
- Raw results, 2-entry wheel (1 MB): one digit per spin.
You may use the charts and figures on this page with a credit link to this page.
Try the wheels
Put the results to work: the Yes or No Wheel (the 2-entry case), the Name Picker Wheel for classrooms, or the Raffle Wheel for giveaways.