feat: add authoritative rating outcome scoring

This commit is contained in:
Josh Creek
2026-08-31 21:07:04 +01:00
parent 63332435d2
commit e13a64756f
3 changed files with 49 additions and 1 deletions
+21
View File
@@ -6,6 +6,27 @@ import (
"time"
)
func TestScoreForPlayerHandlesDrawOvertimeAndAbandon(t *testing.T) {
draw := MatchOutcome{Team0Score: 2, Team1Score: 2}
if score, err := ScoreForPlayer(draw, "player-1", 0); err != nil || score != 0.5 {
t.Fatalf("draw score = %v, %v", score, err)
}
overtime := MatchOutcome{Team0Score: 2, Team1Score: 3, Overtime: true}
if score, err := ScoreForPlayer(overtime, "player-1", 0); err != nil || score != 0 {
t.Fatalf("overtime loser score = %v, %v", score, err)
}
if score, err := ScoreForPlayer(overtime, "player-2", 1); err != nil || score != 1 {
t.Fatalf("overtime winner score = %v, %v", score, err)
}
abandon := MatchOutcome{Team0Score: 0, Team1Score: 10, Abandoners: map[string]bool{"player-1": true}}
if score, err := ScoreForPlayer(abandon, "player-1", 0); err != nil || score != 0 {
t.Fatalf("abandoner score = %v, %v", score, err)
}
if _, err := ScoreForPlayer(draw, "", 0); err == nil {
t.Fatal("empty player accepted")
}
}
func TestUpdateRatingMatchesCanonicalGlicko2Example(t *testing.T) {
current := Rating{Value: 1500, RD: 200, Volatility: 0.06}
opponents := []Opponent{