go_games_collection/wayfarer_galaxy_test.go

76 lines
3 KiB
Go

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("анархия должна быть опаснее корпоративного государства")
}
}