Spaces:
Running
Running
| import { describe, it, expect } from "vitest"; | |
| import { normalizeScore, denormalizeScore } from "./score-utils"; | |
| describe("normalizeScore", () => { | |
| describe("lower-is-better games", () => { | |
| it("normalizes memory scores (defaultHighScore 999)", () => { | |
| // memory: 999 - rawScore | |
| expect(normalizeScore("memory", 12)).toBe(999 - 12); | |
| expect(normalizeScore("memory", 0)).toBe(999); | |
| expect(normalizeScore("memory", 999)).toBe(0); | |
| }); | |
| it("normalizes reaction scores (defaultHighScore 9999)", () => { | |
| // reaction: 9999 - rawScore | |
| expect(normalizeScore("reaction", 200)).toBe(9999 - 200); | |
| expect(normalizeScore("reaction", 0)).toBe(9999); | |
| expect(normalizeScore("reaction", 9999)).toBe(0); | |
| }); | |
| it("normalizes wordle scores (defaultHighScore 7)", () => { | |
| // wordle: 7 - rawScore | |
| expect(normalizeScore("wordle", 3)).toBe(7 - 3); | |
| expect(normalizeScore("wordle", 1)).toBe(6); | |
| expect(normalizeScore("wordle", 7)).toBe(0); | |
| }); | |
| }); | |
| describe("higher-is-better games", () => { | |
| it("passes sequence scores through unchanged", () => { | |
| expect(normalizeScore("sequence", 15)).toBe(15); | |
| expect(normalizeScore("sequence", 0)).toBe(0); | |
| }); | |
| it("passes aim scores through unchanged", () => { | |
| expect(normalizeScore("aim", 500)).toBe(500); | |
| expect(normalizeScore("aim", 0)).toBe(0); | |
| }); | |
| it("passes typing scores through unchanged", () => { | |
| expect(normalizeScore("typing", 120)).toBe(120); | |
| expect(normalizeScore("typing", 0)).toBe(0); | |
| }); | |
| }); | |
| }); | |
| describe("denormalizeScore", () => { | |
| describe("lower-is-better games", () => { | |
| it("reverses memory normalization", () => { | |
| expect(denormalizeScore("memory", 999 - 12)).toBe(12); | |
| }); | |
| it("reverses reaction normalization", () => { | |
| expect(denormalizeScore("reaction", 9999 - 200)).toBe(200); | |
| }); | |
| it("reverses wordle normalization", () => { | |
| expect(denormalizeScore("wordle", 7 - 3)).toBe(3); | |
| }); | |
| }); | |
| describe("higher-is-better games", () => { | |
| it("passes scores through unchanged", () => { | |
| expect(denormalizeScore("sequence", 15)).toBe(15); | |
| expect(denormalizeScore("aim", 500)).toBe(500); | |
| expect(denormalizeScore("typing", 120)).toBe(120); | |
| }); | |
| }); | |
| }); | |
| describe("round-trip normalization", () => { | |
| it("normalize then denormalize returns the original score for lower-is-better", () => { | |
| const memoryRaw = 14; | |
| expect(denormalizeScore("memory", normalizeScore("memory", memoryRaw))).toBe(memoryRaw); | |
| const reactionRaw = 250; | |
| expect(denormalizeScore("reaction", normalizeScore("reaction", reactionRaw))).toBe(reactionRaw); | |
| const wordleRaw = 4; | |
| expect(denormalizeScore("wordle", normalizeScore("wordle", wordleRaw))).toBe(wordleRaw); | |
| }); | |
| it("normalize then denormalize returns the original score for higher-is-better", () => { | |
| const sequenceRaw = 22; | |
| expect(denormalizeScore("sequence", normalizeScore("sequence", sequenceRaw))).toBe(sequenceRaw); | |
| const aimRaw = 850; | |
| expect(denormalizeScore("aim", normalizeScore("aim", aimRaw))).toBe(aimRaw); | |
| const typingRaw = 95; | |
| expect(denormalizeScore("typing", normalizeScore("typing", typingRaw))).toBe(typingRaw); | |
| }); | |
| }); | |