package main import "testing" func TestGenerateSystemIsDeterministic(t *testing.T) { id := WayfarerSystemID{Galaxy: 1, Index: 42} a := GenerateSystem(id) b := GenerateSystem(id) if a != b { t.Fatalf("одна и та же система должна давать одинаковый результат: %+v vs %+v", a, b) } } func TestGenerateSystemDiffersByID(t *testing.T) { a := GenerateSystem(WayfarerSystemID{Galaxy: 0, Index: 0}) b := GenerateSystem(WayfarerSystemID{Galaxy: 0, Index: 1}) if a.Name == b.Name && a.X == b.X && a.Y == b.Y { t.Errorf("разные системы не должны совпадать целиком по всем параметрам") } } func TestGenerateSystemValueRanges(t *testing.T) { for g := 0; g < WayfarerGalaxyCount; g++ { for i := 0; i < WayfarerSystemsPerGalaxy; i++ { s := GenerateSystem(WayfarerSystemID{Galaxy: g, Index: i}) if s.TechLevel < 0 || s.TechLevel > 15 { t.Fatalf("система %v: техуровень вне диапазона: %d", s.ID, s.TechLevel) } if s.Industrial < 0 || s.Industrial > 1 { t.Fatalf("система %v: индустриальность вне диапазона: %v", s.ID, s.Industrial) } if s.Wealth < 0 || s.Wealth > 1 { t.Fatalf("система %v: богатство вне диапазона: %v", s.ID, s.Wealth) } if s.Government < 0 || int(s.Government) >= int(wayfarerGovernmentCount) { t.Fatalf("система %v: неверное правительство: %v", s.ID, s.Government) } if s.X < 0 || s.X > wayfarerGalaxyMapSize || s.Y < 0 || s.Y > wayfarerGalaxyMapSize { t.Fatalf("система %v: координаты вне карты галактики: (%v,%v)", s.ID, s.X, s.Y) } if s.Name == "" { t.Fatalf("система %v: пустое название", s.ID) } } } } func TestGenerateSystemNameVarietyIsReasonable(t *testing.T) { names := map[string]bool{} for i := 0; i < 200; i++ { s := GenerateSystem(WayfarerSystemID{Galaxy: 0, Index: i}) names[s.Name] = true } if len(names) < 100 { t.Errorf("ожидалось разумное разнообразие названий среди 200 систем, получено только %d уникальных", len(names)) } } func TestDistanceSymmetric(t *testing.T) { a := GenerateSystem(WayfarerSystemID{Galaxy: 0, Index: 1}) b := GenerateSystem(WayfarerSystemID{Galaxy: 0, Index: 2}) if a.Distance(b) != b.Distance(a) { t.Errorf("расстояние должно быть симметричным") } if a.Distance(a) != 0 { t.Errorf("расстояние системы до самой себя должно быть 0") } } func TestDangerFactorMatchesGovernment(t *testing.T) { anarchy := WayfarerSystem{Government: GovAnarchy} corporate := WayfarerSystem{Government: GovCorporateState} if anarchy.DangerFactor() <= corporate.DangerFactor() { t.Errorf("анархия должна быть опаснее корпоративного государства") } }