UNPKG

rg-stats

Version:

A library for calculating various rhythm game stats.

59 lines (49 loc) 1.93 kB
import t from "tap"; import { ThrowsToSnapshot } from "../test-utils/throw-snapshot"; import { calculate } from "./chunithm-rating"; t.test("CHUNITHM Rating Tests", (t) => { // Test all the cutoffs for a random chart level // are where they should be. const LEVEL = 12.5; t.equal(calculate(1_010_000, LEVEL), LEVEL + 2.15); t.equal(calculate(1_007_500, LEVEL), LEVEL + 2); t.equal(calculate(1_005_000, LEVEL), LEVEL + 1.5); t.equal(calculate(1_000_000, LEVEL), LEVEL + 1); t.equal(calculate(975_000, LEVEL), LEVEL); t.equal(calculate(900_000, LEVEL), LEVEL - 5); t.equal(calculate(800_000, LEVEL), 3.75); t.equal(calculate(500_000, LEVEL), 0); t.equal(calculate(0, LEVEL), 0); // Also, lets just test some random values inbetween. This should // give us decent coverage of the formula. t.equal(calculate(987_000, LEVEL), 12.98); t.equal(calculate(1_008_000, LEVEL), 14.55); t.equal(calculate(1_003_000, LEVEL), 13.8); t.equal(calculate(999_000, LEVEL), 13.46); t.equal(calculate(980_000, LEVEL), 12.7); t.equal(calculate(950_000, LEVEL), 10.83); t.equal(calculate(810_000, LEVEL), 4.12); t.equal(calculate(600_000, LEVEL), 1.25); t.equal(calculate(50_000, LEVEL), 0); t.end(); }); t.test("CHUNITHM Rating Edge Cases", (t) => { t.equal( calculate(1_010_000, 0), 2.15, "A perfect score on a chart with level 0 should be valid, and worth 0 + 2.15." ); t.equal(calculate(0, 12.5), 0, "A score of 0 should be worth 0."); t.equal(calculate(0, 0), 0, "A score of 0 on a chart with level 0 should be worth 0."); t.end(); }); t.test("CHUNITHM Rating Validation Tests", (t) => { ThrowsToSnapshot(t, () => calculate(-1, 12.5), "Should throw if your score is negative."); ThrowsToSnapshot( t, () => calculate(1_010_001, 12.5), "Should throw if your score is >= 1.01million." ); ThrowsToSnapshot(t, () => calculate(900_000, -1), "Should throw if chart level is negative."); t.end(); });