Corregge la classifica interna di Squadra a parità di punteggio
I giocatori a pari valore condividono ora la stessa posizione (dense rank) invece di essere numerati in sequenza, e il sottotitolo di ogni riga segue il criterio scelto invece di mostrare sempre le presenze consecutive. Per Palloni mostra le volte consecutive in cui il giocatore li ha portati (nuovo Giocatore.seriePalloni). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
@@ -12,6 +12,7 @@ import {
|
||||
eventoPrecedente,
|
||||
eventoSuccessivo,
|
||||
oggiISO,
|
||||
serieConsecutivaPalloni,
|
||||
} from "@/lib/palloni-core";
|
||||
|
||||
const rosa = giocatori.map((g) => ({ id: g.id, nome: g.nome }));
|
||||
@@ -213,4 +214,55 @@ assert.deepEqual(
|
||||
"senza turni assegnati non c'è nessuno da avvisare",
|
||||
);
|
||||
|
||||
// --- serieConsecutivaPalloni: volte consecutive in cui li ha portati lui -----
|
||||
const eventiSerie: Evento[] = [
|
||||
evento("s1", "2026-04-01", "partita"),
|
||||
evento("s2", "2026-04-02", "partita"),
|
||||
evento("s3", "2026-04-03", "partita"),
|
||||
evento("s4", "2026-04-04", "partita"),
|
||||
evento("s5", "2026-04-05", "partita"), // futuro rispetto a OGGI_SERIE
|
||||
];
|
||||
const OGGI_SERIE = "2026-04-05";
|
||||
|
||||
assert.equal(
|
||||
serieConsecutivaPalloni(
|
||||
"g1",
|
||||
{ s1: "g1", s2: "g1", s3: "g2", s4: "g1" },
|
||||
eventiSerie,
|
||||
OGGI_SERIE,
|
||||
),
|
||||
1,
|
||||
"un turno di un altro giocatore azzera la serie: conta solo l'ultimo tratto consecutivo",
|
||||
);
|
||||
assert.equal(
|
||||
serieConsecutivaPalloni(
|
||||
"g2",
|
||||
{ s1: "g1", s2: "g1", s3: "g2", s4: "g1" },
|
||||
eventiSerie,
|
||||
OGGI_SERIE,
|
||||
),
|
||||
0,
|
||||
"l'ultimo evento passato non è suo: serie a zero anche se ne ha uno nel mezzo",
|
||||
);
|
||||
assert.equal(
|
||||
serieConsecutivaPalloni("g1", { s1: "g1", s2: "g1", s3: "g1" }, eventiSerie, OGGI_SERIE),
|
||||
3,
|
||||
"tre volte di fila fino all'ultimo evento passato",
|
||||
);
|
||||
assert.equal(
|
||||
serieConsecutivaPalloni("g1", { s1: "g1", s2: "g1", s4: "g1" }, eventiSerie, OGGI_SERIE),
|
||||
3,
|
||||
"s3 senza turno confermato non spezza la serie: viene saltato, non conta contro nessuno",
|
||||
);
|
||||
assert.equal(
|
||||
serieConsecutivaPalloni("g1", { s1: "g1", s5: "g1" }, eventiSerie, OGGI_SERIE),
|
||||
1,
|
||||
"il turno dell'evento futuro (s5) non è ancora contato",
|
||||
);
|
||||
assert.equal(
|
||||
serieConsecutivaPalloni("g1", {}, eventiSerie, OGGI_SERIE),
|
||||
0,
|
||||
"nessun turno assegnato: nessuna serie",
|
||||
);
|
||||
|
||||
console.log("palloni-core: ok");
|
||||
|
||||
@@ -0,0 +1,59 @@
|
||||
/** Check della classifica della rosa: `bun test/unit/rosa.test.ts`. */
|
||||
import assert from "node:assert/strict";
|
||||
import { classificaRank, dettaglioClassifica } from "@/lib/rosa";
|
||||
|
||||
// --- classificaRank: dense rank, a parità di valore stessa posizione -----------
|
||||
|
||||
assert.deepEqual(
|
||||
classificaRank([4, 4, 3]),
|
||||
[1, 1, 2],
|
||||
"due giocatori a pari merito condividono la posizione, il numero successivo non salta",
|
||||
);
|
||||
|
||||
assert.deepEqual(
|
||||
classificaRank([5, 4, 3, 2]),
|
||||
[1, 2, 3, 4],
|
||||
"nessun pareggio: posizione progressiva normale",
|
||||
);
|
||||
|
||||
assert.deepEqual(
|
||||
classificaRank([3, 3, 3, 1]),
|
||||
[1, 1, 1, 2],
|
||||
"tre giocatori a pari merito in testa condividono tutti la posizione #1",
|
||||
);
|
||||
|
||||
assert.deepEqual(classificaRank([]), [], "rosa vuota: nessuna posizione");
|
||||
|
||||
assert.deepEqual(classificaRank([0, 0]), [1, 1], "parità anche a valore zero");
|
||||
|
||||
// --- dettaglioClassifica: il sottotitolo segue il criterio selezionato -------
|
||||
|
||||
const g = { streak: 12, votiPagella: 18, totaliEventi: 22, cacche: 3, seriePalloni: 4 };
|
||||
|
||||
assert.equal(
|
||||
dettaglioClassifica(g, "presenze"),
|
||||
"12 presenze consecutive",
|
||||
"presenze: mostra la serie di presenze consecutive",
|
||||
);
|
||||
assert.equal(
|
||||
dettaglioClassifica(g, "palloni"),
|
||||
"4 volte consecutive",
|
||||
"palloni: mostra le volte consecutive in cui ha portato i palloni, non le presenze",
|
||||
);
|
||||
assert.equal(
|
||||
dettaglioClassifica(g, "mediaVoto"),
|
||||
"18 voti pagella",
|
||||
"media voto: mostra quanti voti compongono la media",
|
||||
);
|
||||
assert.equal(
|
||||
dettaglioClassifica(g, "mvp"),
|
||||
"22 partite giocate",
|
||||
"mvp: mostra le partite giocate, non le presenze consecutive",
|
||||
);
|
||||
assert.equal(
|
||||
dettaglioClassifica(g, "cacchePartita"),
|
||||
"3 giornate top",
|
||||
"cacche: mostra le giornate da primo classificato",
|
||||
);
|
||||
|
||||
console.log("rosa: ok");
|
||||
Reference in New Issue
Block a user