clone

fifteen puzzle games for the terminal, with daily puzzles, weekly ladders and xp, built on bubble tea

main
puzzletea / games / sudokurgb / elo_test.go
elo_test.go 1.8K
1package sudokurgb23import (4 "reflect"5 "testing"67 "github.com/FelineStateMachine/puzzletea/difficulty"8)910func TestSpawnEloRejectsInvalidElo(t *testing.T) {11 mode := NewMode("Elo", "test", 48)12 gamer, report, err := mode.SpawnElo("seed", difficulty.SoftCapElo+1)13 if err == nil {14 t.Fatal("SpawnElo returned nil error")15 }16 if gamer != nil {17 t.Fatalf("gamer = %#v, want nil", gamer)18 }19 if !reflect.DeepEqual(report, difficulty.Report{}) {20 t.Fatalf("report = %#v, want zero report", report)21 }22}2324func TestSpawnEloDeterministicForSameSeedAndElo(t *testing.T) {25 mode := NewMode("Elo", "test", 48)26 gameA, reportA, err := mode.SpawnElo("same-seed", 1200)27 if err != nil {28 t.Fatal(err)29 }30 gameB, reportB, err := mode.SpawnElo("same-seed", 1200)31 if err != nil {32 t.Fatal(err)33 }3435 saveA, err := gameA.GetSave()36 if err != nil {37 t.Fatal(err)38 }39 saveB, err := gameB.GetSave()40 if err != nil {41 t.Fatal(err)42 }43 if string(saveA) != string(saveB) {44 t.Fatalf("SpawnElo saves differ for same seed and Elo:\n%s\n%s", saveA, saveB)45 }46 if !reflect.DeepEqual(reportA, reportB) {47 t.Fatalf("reports differ:\n%#v\n%#v", reportA, reportB)48 }49}5051func TestSpawnEloReportPopulated(t *testing.T) {52 mode := NewMode("Elo", "test", 48)53 _, report, err := mode.SpawnElo("report-seed", 1800)54 if err != nil {55 t.Fatal(err)56 }57 if report.TargetElo != 1800 {58 t.Fatalf("TargetElo = %d, want 1800", report.TargetElo)59 }60 if err := difficulty.ValidateElo(report.ActualElo); err != nil {61 t.Fatalf("ActualElo = %d is invalid: %v", report.ActualElo, err)62 }63 if report.Confidence == "" {64 t.Fatal("Confidence is empty")65 }66 for _, key := range []string{"clue_count", "unknown_count", "solution_count", "solver_nodes", "branches", "max_depth"} {67 if _, ok := report.Metrics[key]; !ok {68 t.Fatalf("metric %q missing from %+v", key, report.Metrics)69 }70 }71}