package main import "testing" func TestPickBotNameAvoidsUsedWhenPossible(t *testing.T) { used := map[string]bool{} for _, n := range botNamePool[:len(botNamePool)-1] { // все, кроме одного used[n] = true } name := pickBotName(used) if used[name] { t.Errorf("ожидалось единственное свободное имя из пула, получено уже занятое: %q", name) } } func TestPickBotNameFallsBackWhenPoolExhausted(t *testing.T) { used := map[string]bool{} for _, n := range botNamePool { used[n] = true } name := pickBotName(used) // пул исчерпан — допустим повтор found := false for _, n := range botNamePool { if n == name { found = true break } } if !found { t.Errorf("даже при исчерпанном пуле имя должно быть из botNamePool, получено %q", name) } } func TestNewBotRosterDistinctNames(t *testing.T) { names, strategies := newBotRoster(3) if len(names) != 3 || len(strategies) != 3 { t.Fatalf("ожидалось 3 имени и 3 стратегии, получено %d и %d", len(names), len(strategies)) } seen := map[string]bool{} for _, n := range names { if seen[n] { t.Errorf("имена ботов не должны повторяться при наличии свободных: %v", names) } seen[n] = true } } func TestNewModelAssignsNamesFromPool(t *testing.T) { m := NewModel() pool := map[string]bool{} for _, n := range botNamePool { pool[n] = true } for i, p := range m.game.Players { if i == m.humanIdx { continue } if !pool[p.Name] { t.Errorf("имя бота на месте %d (%q) должно быть из пула botNamePool", i, p.Name) } } } func TestBankruptcyMessageDoesNotRevealLevel(t *testing.T) { m := NewModel() m.game.Players[1].Balance = 0 msg := m.checkBankruptcies() if msg == "" { t.Fatalf("ожидалось сообщение о банкротстве") } for _, lvl := range botLevels { if strings_Contains(msg, lvl.Suffix) { t.Errorf("сообщение о банкротстве не должно упоминать уровень сложности (%q найдено в %q)", lvl.Suffix, msg) } } } // strings_Contains — маленький локальный хелпер, чтобы не тянуть // лишний импорт "strings" только ради одной проверки в тесте. func strings_Contains(s, substr string) bool { for i := 0; i+len(substr) <= len(s); i++ { if s[i:i+len(substr)] == substr { return true } } return false }