style(simulation): cargo fmt for generate_corporations

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-04-07 22:59:14 +02:00
co-authored by Claude Sonnet 4.6
parent 822fe488d6
commit 0e6a46c4c0
2 changed files with 409 additions and 88 deletions
+8 -16
View File
@@ -477,8 +477,7 @@ fn assign_brands(
.iter()
.filter(|com| {
// Fuzzy match: commodity words appear in specialization
com.split('_')
.any(|word| spec.contains(word))
com.split('_').any(|word| spec.contains(word))
})
.count() as f64;
(*c, 1.0 + relevance)
@@ -733,11 +732,7 @@ fn fill_coverage_gaps(
let corp_id = make_corp_id(&name);
// Generate enough to reach the 3-corp minimum
let current_count = report
.commodity_coverage
.get(com_id)
.copied()
.unwrap_or(0);
let current_count = report.commodity_coverage.get(com_id).copied().unwrap_or(0);
for _ in current_count..3 {
let n = names::generate_name(rng, sector, &lore.category);
let cid = make_corp_id(&n);
@@ -793,7 +788,10 @@ fn write_output(path: &PathBuf, generated: &BTreeMap<String, GeneratedCorp>) {
out.push_str(&format!("location_id = {:?}\n", corp.location_id));
out.push_str(&format!("location_type = {:?}\n", corp.location_type));
out.push_str(&format!("system_id = {:?}\n", corp.system_id));
out.push_str(&format!("geographic_sector = {:?}\n", corp.geographic_sector));
out.push_str(&format!(
"geographic_sector = {:?}\n",
corp.geographic_sector
));
let brands_str: Vec<String> = corp.brands.iter().map(|b| format!("{:?}", b)).collect();
out.push_str(&format!("brands = [{}]\n", brands_str.join(", ")));
out.push('\n');
@@ -952,10 +950,7 @@ fn main() {
// Print coverage summary
println!("\n Coverage Report:");
println!(" Total generated: {}", report.total_generated);
println!(
" Systems with presence: {}",
report.system_coverage.len()
);
println!(" Systems with presence: {}", report.system_coverage.len());
let mut by_sector: BTreeMap<String, usize> = BTreeMap::new();
for corp in generated.values() {
@@ -984,10 +979,7 @@ fn main() {
// Write output
write_output(&cli.output, &generated);
println!(
"\n Output written to: {}",
cli.output.display()
);
println!("\n Output written to: {}", cli.output.display());
println!(" Done.\n");
}
+401 -72
View File
@@ -16,79 +16,326 @@ use rand_chacha::ChaCha8Rng;
/// Core systems: cosmopolitan mix — the Reach's center of gravity.
const CORE_NAMES: &[&str] = &[
"Alvarez", "Benoit", "Carvalho", "Durand", "Eriksen", "Fournier", "Gao",
"Hartmann", "Ishida", "Johansson", "Kirchner", "Lemaire", "Moreau",
"Nakamura", "Olsson", "Pelletier", "Richter", "Saito", "Torres",
"Ueda", "Vasquez", "Werner", "Xu", "Yamada", "Zhou", "Andersen",
"Beaumont", "Costa", "Delacroix", "Engel", "Fujita", "Gutierrez",
"Hayashi", "Ibarra", "Jensen", "Klein", "Laurent", "Mercier",
"Novak", "Ortiz", "Park", "Reuter", "Suzuki", "Takahashi",
"Ulrich", "Valentin", "Wagner", "Xie", "Yilmaz", "Zhang",
"Alvarez",
"Benoit",
"Carvalho",
"Durand",
"Eriksen",
"Fournier",
"Gao",
"Hartmann",
"Ishida",
"Johansson",
"Kirchner",
"Lemaire",
"Moreau",
"Nakamura",
"Olsson",
"Pelletier",
"Richter",
"Saito",
"Torres",
"Ueda",
"Vasquez",
"Werner",
"Xu",
"Yamada",
"Zhou",
"Andersen",
"Beaumont",
"Costa",
"Delacroix",
"Engel",
"Fujita",
"Gutierrez",
"Hayashi",
"Ibarra",
"Jensen",
"Klein",
"Laurent",
"Mercier",
"Novak",
"Ortiz",
"Park",
"Reuter",
"Suzuki",
"Takahashi",
"Ulrich",
"Valentin",
"Wagner",
"Xie",
"Yilmaz",
"Zhang",
];
/// North reach: Nordic, Scottish, northern European — Calloway heritage.
const NORTH_REACH_NAMES: &[&str] = &[
"Andersson", "Bjornsson", "Calloway", "Dalsgaard", "Eklund", "Falk",
"Grimstad", "Hedlund", "Ivarsson", "Jonasson", "Kirkpatrick", "Lindqvist",
"MacLeod", "Nordstrom", "Olafsson", "Pettersson", "Rehn", "Strandberg",
"Thorsen", "Ulvskog", "Vikstrom", "Wahlberg", "Aberg", "Berglund",
"Carlsen", "Dalgaard", "Engstrom", "Forsell", "Gustafsson", "Halvorsen",
"Ingvarsson", "Jansson", "Knudsen", "Lundin", "MacPherson", "Nylund",
"Ostergaard", "Palsson", "Rasmussen", "Sjoberg", "Toft", "Ulfsson",
"Vestergaard", "Wiklund", "Aasen", "Brannstrom", "Dahl", "Eide",
"Friberg", "Gren",
"Andersson",
"Bjornsson",
"Calloway",
"Dalsgaard",
"Eklund",
"Falk",
"Grimstad",
"Hedlund",
"Ivarsson",
"Jonasson",
"Kirkpatrick",
"Lindqvist",
"MacLeod",
"Nordstrom",
"Olafsson",
"Pettersson",
"Rehn",
"Strandberg",
"Thorsen",
"Ulvskog",
"Vikstrom",
"Wahlberg",
"Aberg",
"Berglund",
"Carlsen",
"Dalgaard",
"Engstrom",
"Forsell",
"Gustafsson",
"Halvorsen",
"Ingvarsson",
"Jansson",
"Knudsen",
"Lundin",
"MacPherson",
"Nylund",
"Ostergaard",
"Palsson",
"Rasmussen",
"Sjoberg",
"Toft",
"Ulfsson",
"Vestergaard",
"Wiklund",
"Aasen",
"Brannstrom",
"Dahl",
"Eide",
"Friberg",
"Gren",
];
/// South reach: Eastern European, East Asian industrial — Stalownia corridor.
const SOUTH_REACH_NAMES: &[&str] = &[
"Adamski", "Baranov", "Chernov", "Dubois", "Egorov", "Filipov",
"Gromov", "Horvat", "Ivanova", "Jankovic", "Kowalski", "Lazarev",
"Morozov", "Novikov", "Ostrowski", "Petrov", "Reznik", "Sokolov",
"Tkachenko", "Uvarov", "Volkov", "Wojcik", "Yakimov", "Zheng",
"Babic", "Chernyshev", "Dragunov", "Fedorov", "Grushevsky", "Havel",
"Ito", "Jovanovic", "Katsaros", "Lebedev", "Mazur", "Nemec",
"Ochoa", "Popov", "Radic", "Smirnov", "Tanaka", "Urasawa",
"Vasiliev", "Watanabe", "Xiang", "Yegorov", "Zaytsev", "Borysko",
"Chen", "Dimitrov",
"Adamski",
"Baranov",
"Chernov",
"Dubois",
"Egorov",
"Filipov",
"Gromov",
"Horvat",
"Ivanova",
"Jankovic",
"Kowalski",
"Lazarev",
"Morozov",
"Novikov",
"Ostrowski",
"Petrov",
"Reznik",
"Sokolov",
"Tkachenko",
"Uvarov",
"Volkov",
"Wojcik",
"Yakimov",
"Zheng",
"Babic",
"Chernyshev",
"Dragunov",
"Fedorov",
"Grushevsky",
"Havel",
"Ito",
"Jovanovic",
"Katsaros",
"Lebedev",
"Mazur",
"Nemec",
"Ochoa",
"Popov",
"Radic",
"Smirnov",
"Tanaka",
"Urasawa",
"Vasiliev",
"Watanabe",
"Xiang",
"Yegorov",
"Zaytsev",
"Borysko",
"Chen",
"Dimitrov",
];
/// West reach: German, Central European — Compact territory, Westphalian influence.
const WEST_REACH_NAMES: &[&str] = &[
"Albrecht", "Baumann", "Christensen", "Dietrich", "Eisenberg", "Fischer",
"Gruber", "Hoffmann", "Ingolstadt", "Jaeger", "Kessler", "Lehmann",
"Mueller", "Neumann", "Obermann", "Pfeiffer", "Quandt", "Roth",
"Schaefer", "Thiel", "Urban", "Vogt", "Weidenfeld", "Ziegler",
"Becker", "Claussen", "Dorfmann", "Eberhardt", "Fleischer", "Gerstner",
"Haber", "Imhof", "Jung", "Kraemer", "Linden", "Metzger",
"Niedermann", "Opitz", "Preuss", "Raabe", "Steinbach", "Trautmann",
"Unger", "Vollmer", "Winterberg", "Zahn", "Auerbach", "Bruckner",
"Dahlem", "Eckhardt",
"Albrecht",
"Baumann",
"Christensen",
"Dietrich",
"Eisenberg",
"Fischer",
"Gruber",
"Hoffmann",
"Ingolstadt",
"Jaeger",
"Kessler",
"Lehmann",
"Mueller",
"Neumann",
"Obermann",
"Pfeiffer",
"Quandt",
"Roth",
"Schaefer",
"Thiel",
"Urban",
"Vogt",
"Weidenfeld",
"Ziegler",
"Becker",
"Claussen",
"Dorfmann",
"Eberhardt",
"Fleischer",
"Gerstner",
"Haber",
"Imhof",
"Jung",
"Kraemer",
"Linden",
"Metzger",
"Niedermann",
"Opitz",
"Preuss",
"Raabe",
"Steinbach",
"Trautmann",
"Unger",
"Vollmer",
"Winterberg",
"Zahn",
"Auerbach",
"Bruckner",
"Dahlem",
"Eckhardt",
];
/// East reach: Filipino, Korean, maritime Asian — distinctive identity.
const EAST_REACH_NAMES: &[&str] = &[
"Aquino", "Bautista", "Cruz", "Dalisay", "Espiritu", "Flores",
"Garcia", "Hernandez", "Ilagan", "Jeon", "Kim", "Lim",
"Magalang", "Navarro", "Ocampo", "Park", "Quijano", "Reyes",
"Santos", "Tan", "Uy", "Villanueva", "Wong", "Yoo",
"Aguilar", "Buenaventura", "Castillo", "Dizon", "Enriquez", "Fernandez",
"Gonzales", "Hwang", "Ignacio", "Jeong", "Kwon", "Lee",
"Marasigan", "Nakamura", "Oh", "Perez", "Ramos", "Son",
"Tolentino", "Umali", "Valdez", "Yun", "Zamora", "Baek",
"Choi", "Dela Cruz",
"Aquino",
"Bautista",
"Cruz",
"Dalisay",
"Espiritu",
"Flores",
"Garcia",
"Hernandez",
"Ilagan",
"Jeon",
"Kim",
"Lim",
"Magalang",
"Navarro",
"Ocampo",
"Park",
"Quijano",
"Reyes",
"Santos",
"Tan",
"Uy",
"Villanueva",
"Wong",
"Yoo",
"Aguilar",
"Buenaventura",
"Castillo",
"Dizon",
"Enriquez",
"Fernandez",
"Gonzales",
"Hwang",
"Ignacio",
"Jeong",
"Kwon",
"Lee",
"Marasigan",
"Nakamura",
"Oh",
"Perez",
"Ramos",
"Son",
"Tolentino",
"Umali",
"Valdez",
"Yun",
"Zamora",
"Baek",
"Choi",
"Dela Cruz",
];
/// Deep frontier: mixed backgrounds from all settler waves — no dominant culture.
const FRONTIER_NAMES: &[&str] = &[
"Adeyemi", "Bergstrom", "Chandra", "Duval", "Emeka", "Fonseca",
"Gupta", "Hassan", "Ibrahim", "Jansson", "Kovac", "Liu",
"Martinez", "Nkosi", "Okafor", "Patel", "Quinn", "Rodriguez",
"Sousa", "Thorne", "Uddin", "Varga", "Wu", "Xiong",
"Yoshida", "Zhao", "Abara", "Beaumont", "Cardenas", "Doyle",
"Ekwueme", "Ferreira", "Gomes", "Henriksen", "Idris", "Juma",
"Kato", "Larsen", "Morales", "Ndlovu", "Osei", "Petrov",
"Ruiz", "Singh", "Tavares", "Uchida", "Volkov", "Wang",
"Yang", "Zaman",
"Adeyemi",
"Bergstrom",
"Chandra",
"Duval",
"Emeka",
"Fonseca",
"Gupta",
"Hassan",
"Ibrahim",
"Jansson",
"Kovac",
"Liu",
"Martinez",
"Nkosi",
"Okafor",
"Patel",
"Quinn",
"Rodriguez",
"Sousa",
"Thorne",
"Uddin",
"Varga",
"Wu",
"Xiong",
"Yoshida",
"Zhao",
"Abara",
"Beaumont",
"Cardenas",
"Doyle",
"Ekwueme",
"Ferreira",
"Gomes",
"Henriksen",
"Idris",
"Juma",
"Kato",
"Larsen",
"Morales",
"Ndlovu",
"Osei",
"Petrov",
"Ruiz",
"Singh",
"Tavares",
"Uchida",
"Volkov",
"Wang",
"Yang",
"Zaman",
];
// ---------------------------------------------------------------------------
@@ -96,38 +343,106 @@ const FRONTIER_NAMES: &[&str] = &[
// ---------------------------------------------------------------------------
const EXTRACTION_SUFFIXES: &[&str] = &[
"Mining Co.", "Extraction", "Resources", "Minerals", "Mining",
"Quarry Works", "Deep Drill", "Ore Works", "Claims", "Mining & Salvage",
"Prospecting", "Dig Co.", "Rock Works", "Shaft Mining", "Surface Mining",
"Mining Co.",
"Extraction",
"Resources",
"Minerals",
"Mining",
"Quarry Works",
"Deep Drill",
"Ore Works",
"Claims",
"Mining & Salvage",
"Prospecting",
"Dig Co.",
"Rock Works",
"Shaft Mining",
"Surface Mining",
];
const AGRICULTURE_SUFFIXES: &[&str] = &[
"Farms", "Agricultural Co.", "Growers", "Harvest", "Provisions",
"Ranchers", "Fisheries", "Food Co.", "Plantations", "Cultivators",
"Produce", "Orchard", "Dairy", "Stockfeed", "Processing",
"Farms",
"Agricultural Co.",
"Growers",
"Harvest",
"Provisions",
"Ranchers",
"Fisheries",
"Food Co.",
"Plantations",
"Cultivators",
"Produce",
"Orchard",
"Dairy",
"Stockfeed",
"Processing",
];
const MANUFACTURING_SUFFIXES: &[&str] = &[
"Manufacturing", "Works", "Industries", "Fabrication", "Engineering",
"Precision", "Assembly", "Components", "Foundry", "Machine Works",
"Systems", "Technical", "Metalworks", "Forging", "Production",
"Manufacturing",
"Works",
"Industries",
"Fabrication",
"Engineering",
"Precision",
"Assembly",
"Components",
"Foundry",
"Machine Works",
"Systems",
"Technical",
"Metalworks",
"Forging",
"Production",
];
const TRADE_LOGISTICS_SUFFIXES: &[&str] = &[
"Freight", "Logistics", "Shipping", "Transport", "Haulage",
"Cargo", "Transit", "Distribution", "Forwarding", "Express",
"Lines", "Carriers", "Fleet", "Couriers", "Supply Co.",
"Freight",
"Logistics",
"Shipping",
"Transport",
"Haulage",
"Cargo",
"Transit",
"Distribution",
"Forwarding",
"Express",
"Lines",
"Carriers",
"Fleet",
"Couriers",
"Supply Co.",
];
const SERVICES_SUFFIXES: &[&str] = &[
"Services", "Associates", "Consulting", "Partners", "Group",
"Holdings", "Clinic", "Bureau", "Agency", "Office",
"Practice", "Solutions", "Advisors", "Trust", "Institute",
"Services",
"Associates",
"Consulting",
"Partners",
"Group",
"Holdings",
"Clinic",
"Bureau",
"Agency",
"Office",
"Practice",
"Solutions",
"Advisors",
"Trust",
"Institute",
];
const INTELLIGENCE_SUFFIXES: &[&str] = &[
"Analytics", "Intelligence", "Data Services", "Information", "Research",
"Advisory", "Insights", "Consulting", "Networks", "Analysis",
"Analytics",
"Intelligence",
"Data Services",
"Information",
"Research",
"Advisory",
"Insights",
"Consulting",
"Networks",
"Analysis",
];
// ---------------------------------------------------------------------------
@@ -203,8 +518,22 @@ mod tests {
#[test]
fn names_not_empty() {
let mut rng = ChaCha8Rng::seed_from_u64(1);
for sector in &["core", "north_reach", "south_reach", "west_reach", "east_reach", "deep_frontier"] {
for cat in &["extraction", "agriculture", "manufacturing", "trade_logistics", "services", "intelligence"] {
for sector in &[
"core",
"north_reach",
"south_reach",
"west_reach",
"east_reach",
"deep_frontier",
] {
for cat in &[
"extraction",
"agriculture",
"manufacturing",
"trade_logistics",
"services",
"intelligence",
] {
let name = generate_name(&mut rng, sector, cat);
assert!(!name.is_empty(), "Empty name for {}/{}", sector, cat);
assert!(name.contains(' '), "No space in name: {}", name);