THE CARDS, UNDER THE MICROSCOPE
Randomness Investigation
How often do sets, flopped flushes and straights, board textures and draw completions actually occur? We removed table animations and dealt ten million virtual decks through JinRuoYu’s live shuffle function. We compared player and community-card outcomes with exact mathematical odds.
WHAT WE FOUND
None of the predefined card-position or draw comparisons crossed the adjusted 5% significance threshold in this sample. That is consistent with the calculated probabilities, but it is not proof of perfect randomness.
This is a simulation of the application’s shuffle code in Node’s Web Crypto runtime. Live games use the same shuffle code on Cloudflare’s Web Crypto runtime. We did not sample live users’ hidden cards or independently audit Cloudflare’s entropy source.
QUESTION 01
Which cards did we investigate?
All 52 positions in every deck: the nine players’ first and second hole cards, burn cards, flop, turn and river, plus unused cards. We tested whether each of the 52 specific cards appears in each position about 1/52 of the time. For draw outcomes, we selected one player per deck, rotating across the nine seats. Counting nine correlated players as nine independent trials would have made the statistical tests misleading.
Private-card composition also matched its combinatorial reference: pairs 589,139 vs 588,235 expected; suited unpaired 2,355,376 vs 2,352,941; off-suit unpaired 7,055,485 vs 7,058,824. Pearson χ²(2) = 5.49, p = 0.0643.
EARLIER PILOT
What happened in the first million decks?
Before this larger study, we ran a one-million-deck pilot. Its third card position was the only one of 52 to cross the adjusted threshold: χ²(51) = 88.60, unadjusted p = 0.0009, Holm-adjusted p = 0.0448. At a family-wide 5% threshold, a chance false alarm remains possible even with a fair shuffle. We have kept that original result available.
After seeing the pilot result, we ran a separate, independent sample of 1,000,000 decks, checking only position 3. It produced χ²(51) = 52.32, p = 0.4225. The independent pilot follow-up did not flag position 3. This is consistent with a chance false alarm in the pilot screen, although it cannot rule out a smaller bias. The earlier ten-million-deck run and this expanded ten-million-deck run are independent. We preserved all earlier results and did not replace or hide the pilot or follow-up.
QUESTION 02
How often do made hands and draws arrive?
These rows cover five-card hands on the flop, pocket-pair outcomes, suited starting cards, the flop board itself, and seven-card or draw outcomes. Each deck contributes one rotating player hand to player-level comparisons; board-texture rows use the same deck’s community cards. Conditional rows count only deals that qualify for that situation, so their sample sizes differ. Rows can overlap; for example a straight flush belongs to both “flopped straight” and “flopped flush.” Bets and folds do not affect these counts.
| Measure | Qualifying deals | Observed | Expected | Difference | Adjusted p |
|---|---|---|---|---|---|
| Made hands on the flop (your two cards + three community cards) | |||||
| Exactly one pairFive-card hand has one pair, excluding two pair or better. | 10,000,000 | 42.261%4,226,136 hands | 42.257%4,225,690 hands | +0.004 pp95% interval for difference: -0.026 pp to +0.035 pp | 1.0000 |
| Exactly two pairFive-card hand has two distinct pairs. | 10,000,000 | 4.760%476,005 hands | 4.754%475,390 hands | +0.006 pp95% interval for difference: -0.007 pp to +0.019 pp | 1.0000 |
| Exactly three of a kindFive-card hand has trips, excluding full houses and quads. | 10,000,000 | 2.109%210,871 hands | 2.113%211,285 hands | -0.004 pp95% interval for difference: -0.013 pp to +0.005 pp | 1.0000 |
| Flopped straightFive cards contain a straight; includes the rare straight flush. | 10,000,000 | 0.397%39,688 hands | 0.394%39,400 hands | +0.003 pp95% interval for difference: -0.001 pp to +0.007 pp | 1.0000 |
| Flopped flushAll five cards share a suit; includes the rare straight flush. | 10,000,000 | 0.196%19,632 hands | 0.198%19,808 hands | -0.002 pp95% interval for difference: -0.005 pp to +0.001 pp | 1.0000 |
| Flopped full houseThree cards of one rank and two of another. | 10,000,000 | 0.144%14,394 hands | 0.144%14,406 hands | -0.000 pp95% interval for difference: -0.002 pp to +0.002 pp | 1.0000 |
| Flopped four of a kindFour cards of one rank among the five. | 10,000,000 | 0.025%2,459 hands | 0.024%2,401 hands | +0.001 pp95% interval for difference: -0.000 pp to +0.002 pp | 1.0000 |
| Flopped straight flushFive suited cards in sequence, including royal flushes. | 10,000,000 | 0.002%164 hands | 0.002%154 hands | +0.000 pp95% interval for difference: -0.000 pp to +0.000 pp | 1.0000 |
| Pocket-pair outcomes | |||||
| Flop a third card of your pocket pairExactly one of the two remaining matching cards arrives on the flop; the best hand may be a full house if the other flop cards pair. | 589,139 | 11.480%67,636 hands | 11.510%67,811 hands | -0.030 pp95% interval for difference: -0.111 pp to +0.052 pp | 1.0000 |
| Flop a clean set (exact trips)Exactly one matching card arrives, and the other two flop cards have different ranks. | 589,139 | 10.733%63,234 hands | 10.776%63,483 hands | -0.042 pp95% interval for difference: -0.121 pp to +0.037 pp | 1.0000 |
| Flop quads with a pocket pairBoth remaining cards of the pocket-pair rank arrive on the flop. | 589,139 | 0.246%1,452 hands | 0.245%1,443 hands | +0.002 pp95% interval for difference: -0.011 pp to +0.014 pp | 1.0000 |
| Turn a third pocket-pair card after a blank flopGiven a pocket pair and no matching flop card, one of two outs arrives on the turn. | 520,051 | 4.262%22,166 hands | 4.255%22,130 hands | +0.007 pp95% interval for difference: -0.048 pp to +0.062 pp | 1.0000 |
| River a third pocket-pair card after two blanksGiven a pocket pair and no matching flop or turn card, one of two outs arrives on the river. | 497,885 | 4.314%21,479 hands | 4.348%21,647 hands | -0.034 pp95% interval for difference: -0.090 pp to +0.023 pp | 1.0000 |
| Hit a third pocket-pair card by river after a blank flopTurn or river brings at least one matching card after none came on the flop. | 520,051 | 8.392%43,645 hands | 8.418%43,779 hands | -0.026 pp95% interval for difference: -0.101 pp to +0.050 pp | 1.0000 |
| Hit a third pocket-pair card by riverAt least one of the five community cards matches the starting pair. | 589,139 | 19.135%112,733 hands | 19.184%113,019 hands | -0.048 pp95% interval for difference: -0.149 pp to +0.052 pp | 1.0000 |
| Make quads by river after flopping a third cardGiven exactly one matching flop card, the last card of that rank arrives on turn or river. | 67,636 | 4.335%2,932 hands | 4.255%2,878 hands | +0.080 pp95% interval for difference: -0.072 pp to +0.232 pp | 1.0000 |
| Suited starting cards | |||||
| Flop a flush with suited hole cardsAll three flop cards match the suit of the two hole cards. | 2,355,376 | 0.833%19,632 hands | 0.842%19,828 hands | -0.008 pp95% interval for difference: -0.020 pp to +0.003 pp | 1.0000 |
| Flop a four-flush with suited hole cardsExactly two of the three flop cards match the hole-card suit. | 2,355,376 | 10.955%258,043 hands | 10.944%257,769 hands | +0.012 pp95% interval for difference: -0.028 pp to +0.051 pp | 1.0000 |
| Flop a backdoor flush draw with suited hole cardsExactly one flop card matches the hole-card suit. | 2,355,376 | 41.608%980,017 hands | 41.587%979,524 hands | +0.021 pp95% interval for difference: -0.042 pp to +0.084 pp | 1.0000 |
| Complete that backdoor flush by riverGiven exactly one matching flop card, both turn and river match the hole-card suit. | 980,017 | 4.178%40,945 hands | 4.163%40,796 hands | +0.015 pp95% interval for difference: -0.024 pp to +0.055 pp | 1.0000 |
| Complete your hole-card suit by riverAt least three of the five community cards match the starting suit. | 2,355,376 | 6.403%150,806 hands | 6.400%150,740 hands | +0.003 pp95% interval for difference: -0.028 pp to +0.034 pp | 1.0000 |
| Community-card flop texture | |||||
| Monotone flopAll three community cards have the same suit. | 10,000,000 | 5.165%516,513 hands | 5.176%517,647 hands | -0.011 pp95% interval for difference: -0.025 pp to +0.002 pp | 1.0000 |
| Rainbow flopThe three community cards have three different suits. | 10,000,000 | 39.787%3,978,725 hands | 39.765%3,976,471 hands | +0.023 pp95% interval for difference: -0.008 pp to +0.053 pp | 1.0000 |
| Paired or tripled flopAt least two community cards have the same rank. | 10,000,000 | 17.182%1,718,179 hands | 17.176%1,717,647 hands | +0.005 pp95% interval for difference: -0.018 pp to +0.029 pp | 1.0000 |
| Three-of-a-kind flopAll three community cards have the same rank. | 10,000,000 | 0.235%23,478 hands | 0.235%23,529 hands | -0.001 pp95% interval for difference: -0.004 pp to +0.002 pp | 1.0000 |
| Seven-card outcomes and draw completion | |||||
| Flush available in seven cardsAny five cards of one suit, whether or not a stronger hand is also available. | 10,000,000 | 3.058%305,751 hands | 3.057%305,658 hands | +0.001 pp95% interval for difference: -0.010 pp to +0.012 pp | 1.0000 |
| Straight available in seven cardsAny sequence of five ranks, including A–2–3–4–5. Stronger hands may overlap. | 10,000,000 | 4.823%482,331 hands | 4.824%482,438 hands | -0.001 pp95% interval for difference: -0.014 pp to +0.012 pp | 1.0000 |
| Flop flush draw → flush by riverExactly four of a suit among the two hole cards and the flop. | 429,413 | 35.073%150,610 hands | 34.968%150,156 hands | +0.106 pp95% interval for difference: -0.037 pp to +0.248 pp | 1.0000 |
| Flop straight draw → straight by riverAt least one rank can make a straight on the next card; river result also includes runner-runner paths. | 1,326,427 | 20.894%277,142 hands | 20.878%276,937 hands | +0.015 pp95% interval for difference: -0.053 pp to +0.084 pp | 1.0000 |
| Flop straight draw → straight on turnAt least one rank completes a straight immediately on the next card. | 1,326,427 | 10.674%141,578 hands | 10.647%141,223 hands | +0.027 pp95% interval for difference: -0.025 pp to +0.079 pp | 1.0000 |
| Flop four-out straight drawOne completing rank; typically an inside draw. | 993,482 | 17.340%172,265 hands | 17.335%172,218 hands | +0.005 pp95% interval for difference: -0.070 pp to +0.079 pp | 1.0000 |
| Flop eight-or-more-out straight drawAt least two completing ranks; includes open-ended and double-gutshot draws. | 332,945 | 31.500%104,877 hands | 31.452%104,719 hands | +0.047 pp95% interval for difference: -0.110 pp to +0.205 pp | 1.0000 |
| Flop combo draw → flush or straightBoth flush and straight draws on the flop; overlapping outs count once. | 71,216 | 47.958%34,154 hands | 47.661%33,943 hands | +0.297 pp95% interval for difference: -0.069 pp to +0.663 pp | 1.0000 |
| Turn flush draw → flush on riverFour of a suit among the player’s six known cards. | 1,040,771 | 19.584%203,825 hands | 19.565%203,629 hands | +0.019 pp95% interval for difference: -0.057 pp to +0.095 pp | 1.0000 |
| Turn straight draw → straight on riverAt least one rank completes a straight on the river. | 2,692,873 | 11.180%301,065 hands | 11.206%301,751 hands | -0.025 pp95% interval for difference: -0.063 pp to +0.012 pp | 1.0000 |
| Turn combo draw → either on riverBoth draws present on the turn; overlapping outs count once. | 317,149 | 28.055%88,977 hands | 28.008%88,828 hands | +0.047 pp95% interval for difference: -0.109 pp to +0.203 pp | 1.0000 |
The expected rates come from exact card combinations or exact conditional runouts. A 95% interval spanning zero is compatible with no difference. Adjusted p values use Holm’s correction across all 36 reported comparisons. These expanded comparisons were selected after the first ten-million-deck report, so this is a new independent run. A small p value flags a discrepancy for investigation; a large one does not prove fairness.
HOW WE COUNTED
Why these are the right odds
Flush draw
With four cards of a suit on the flop, nine of the 47 unseen cards complete the flush. The chance by the river is 1 − C(38, 2) / C(47, 2) = 34.968%. On the turn it is 9 / 46 = 19.565%.
Straight draw
One-card completing ranks are identified from the actual player cards and board, including ace-low straights. For each flop we calculate the exact chance over all C(47, 2) = 1,081 possible turn/river rank pairs. That includes runner-runner paths. On the turn, completing cards are counted out of 46.
Combo draw
When both draws exist, we count a completed flush or straight once, even if a card serves both. On the flop we enumerate all 1,081 possible two-card runouts; on the turn we count the union of distinct outs among the 46 unseen cards.
All seven cards
Exact reference rates come from combinatorics: flushes from suit counts and straights from rank-multiplicity enumeration across all 133,784,560 seven-card combinations. These rows include straights or flushes that coexist with stronger hands.
Flopped hands
Five-card outcomes use all C(52, 5) = 2,598,960 possible player-plus-flop combinations. There are 5,148 flushes and 10,240 straights, with 40 straight flushes in both totals. These are exact probabilities, not outside estimates.
Pocket pairs and board texture
Given a pocket pair, the flop is chosen from C(50, 3) = 19,600 possibilities. Exactly one of the two remaining rank-mates appears in 2,256 cases; 2,112 of these are clean sets (the two other flop ranks differ), and 48 cases flop quads. A later rank-mate can also make a full house on a paired board, so those rows explicitly count the matching card rather than claiming the best hand is always trips. Board-only texture uses C(52, 3) = 22,100 flop combinations.
REPRODUCE IT
Methods, files and limitations
- Use the study program, parallel runner, and worker script with the app’s shuffle module in this project. Run
node scripts/randomness-parallel.mjs --hands 10000000 --workers 10 --out study/randomness-results.jsonwith Node 24 or later. Each run will have different random data. - Inspect the ten-million-deck aggregate results (JSON), including all 52 position tests and unrounded counts. The previous ten-million-deck run, earlier pilot, pilot follow-up, and follow-up program are also available. All runs used shuffle-module SHA-256
9e82d0a3232d1c3efbf38156a9a030955b9e3de0ad1f808e5f278b82237627f6. - Tests use two-sided conditional z comparisons for draw frequencies and Pearson χ² for each card position. Holm adjustment controls the family-wise 5% threshold separately for the 36 hand/board/draw endpoints and 52 card-position tests in each full study. The pilot follow-up tests only its originally flagged position, at 5%. We report raw observed rates, exact conditional expectations and 95% intervals for their difference.
The simulated decks were not produced by live games, and no player data is in the study. We retained aggregate counts, not all raw deck sequences. This checks the implementation’s statistical behavior; it cannot establish that an operator could never change code or influence an individual live deal. A separate commitment and verification mechanism would be needed for players to audit a particular hand. As NIST cautions, statistical testing cannot certify a random-number generator or replace cryptographic analysis. The app obtains its shuffle randomness with Web Crypto’s getRandomValues and uses rejection sampling in Fisher–Yates to avoid modulo bias.
Expanded ten-million-deck study 2026-09-16T14:02:46.228Z · Earlier ten-million-deck run 2026-09-16T13:45:16.008Z · Pilot 2026-09-16T13:13:53.517Z · Pilot follow-up 2026-09-16T13:17:38.427Z · Node v24.19.0 · No live player information.