clone

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

chore/app-model-decomp
puzzletea / schedule / select_test.go
select_test.go 2.2K
1package schedule23import (4 "math/rand/v2"5 "testing"67 "github.com/FelineStateMachine/puzzletea/game"8)910type testSeededSpawner struct{}1112func (testSeededSpawner) Spawn() (game.Gamer, error) { return nil, nil }13func (testSeededSpawner) SpawnSeeded(*rand.Rand) (game.Gamer, error) { return nil, nil }1415func TestSelectBySeedDeterministic(t *testing.T) {16 entries := []Entry{17 {Spawner: testSeededSpawner{}, GameType: "Sudoku", Mode: "Easy"},18 {Spawner: testSeededSpawner{}, GameType: "Nonogram", Mode: "Mini"},19 {Spawner: testSeededSpawner{}, GameType: "Takuzu", Mode: "Beginner"},20 }2122 first, ok := SelectBySeed("seed-1", entries)23 if !ok {24 t.Fatal("SelectBySeed() = false, want true")25 }26 second, ok := SelectBySeed("seed-1", entries)27 if !ok {28 t.Fatal("SelectBySeed() = false, want true")29 }30 if first.GameType != second.GameType || first.Mode != second.Mode {31 t.Fatalf("selection mismatch: (%q,%q) vs (%q,%q)",32 first.GameType, first.Mode, second.GameType, second.Mode)33 }34}3536func TestSelectBySeedStableForUnchangedWinners(t *testing.T) {37 entries := []Entry{38 {Spawner: testSeededSpawner{}, GameType: "Sudoku", Mode: "Easy"},39 {Spawner: testSeededSpawner{}, GameType: "Nonogram", Mode: "Mini"},40 {Spawner: testSeededSpawner{}, GameType: "Takuzu", Mode: "Beginner"},41 }4243 seeds := []string{"seed-a", "seed-b", "seed-c", "seed-d", "seed-e"}44 original := make(map[string]Entry, len(seeds))45 for _, seed := range seeds {46 selected, ok := SelectBySeed(seed, entries)47 if !ok {48 t.Fatalf("SelectBySeed(%q) = false, want true", seed)49 }50 original[seed] = selected51 }5253 synthetic := Entry{Spawner: testSeededSpawner{}, GameType: "Synthetic", Mode: "Synthetic"}54 extended := append(append([]Entry(nil), entries...), synthetic)55 for _, seed := range seeds {56 selected, ok := SelectBySeed(seed, extended)57 if !ok {58 t.Fatalf("SelectBySeed(%q) = false, want true", seed)59 }60 if selected.GameType == synthetic.GameType && selected.Mode == synthetic.Mode {61 continue62 }63 want := original[seed]64 if selected.GameType != want.GameType || selected.Mode != want.Mode {65 t.Fatalf("seed %q changed from (%q,%q) to (%q,%q)",66 seed, want.GameType, want.Mode, selected.GameType, selected.Mode)67 }68 }69}