A rate gate needs its sample size derived from the rate
The slid-serve test asked for 6 of 10 sliced serves returned. Measured over 200 trials a seed across eight seeds, the receiver's real rate is 0.85..0.92 — so the assertion was sound and the SAMPLE was too small: at p ~= 0.88, 10 trials land at or below 5 with probability ~0.004, one seed in 230, and SEED=80 was it. n is now 40 at the same 60% bar, which puts the threshold five standard deviations below the true rate while still failing instantly if the receiver regresses toward the 0-in-24 the test was born from. It is free: a returned serve breaks the frame loop early, and the suite still runs in ~0.11 s. Green on seeds 1..400. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
1 parent
bdc3f23f92
commit
131c0fa114
2 files changed
+19
-6
No files matched your search
@@ -1108,8 +1108,14 @@ test('a served ball with a slide on it is no longer a free kill', () => {
|
||||
}
|
||||
return false;
|
||||
};
|
||||
// n = 40, NOT 10, and this is the arithmetic to copy for any other rate gate here. The real return
|
||||
// rate is ~0.88 (measured, 200 trials a seed across eight seeds: 0.85..0.92), so a 10-sample gate
|
||||
// asking for 6 fails whenever the tail lands — p ~= 0.004, which is one seed in 230 and duly showed
|
||||
// up as SEED=80. At 40 the same 60% bar sits five standard deviations below the true rate: the gate
|
||||
// still fails instantly if the receiver regresses toward the 0-in-24 this test was born from, and
|
||||
// it costs nothing (a returned serve breaks the frame loop early).
|
||||
let got = 0;
|
||||
const n = 10;
|
||||
const n = 40;
|
||||
for (let i = 0; i < n; i++) if (serve(-0.5)) got++;
|
||||
assert.ok(got >= n * 0.6, `opponent one returns a slid serve: ${got}/${n} (was 0)`);
|
||||
});
|
||||
|
||||
Reference in new issue
Block a user