Expose save-world issue state in summaries

This commit is contained in:
Jan Petykiewicz 2026-04-17 18:05:07 -07:00
commit 77c847afba
2 changed files with 203 additions and 0 deletions

View file

@ -60,6 +60,20 @@ pub struct ExpectedRuntimeSummary {
#[serde(default)]
pub world_restore_territory_access_cost: Option<u32>,
#[serde(default)]
pub world_restore_issue_37_value: Option<u32>,
#[serde(default)]
pub world_restore_issue_37_multiplier_raw_u32: Option<u32>,
#[serde(default)]
pub world_restore_issue_37_multiplier_value_f32_text: Option<String>,
#[serde(default)]
pub world_restore_economic_tuning_mirror_raw_u32: Option<u32>,
#[serde(default)]
pub world_restore_economic_tuning_mirror_value_f32_text: Option<String>,
#[serde(default)]
pub world_restore_economic_tuning_lane_count: Option<usize>,
#[serde(default)]
pub world_restore_economic_tuning_lane_value_f32_text: Option<Vec<String>>,
#[serde(default)]
pub world_restore_absolute_counter_restore_kind: Option<String>,
#[serde(default)]
pub world_restore_absolute_counter_adjustment_context: Option<String>,
@ -419,6 +433,70 @@ impl ExpectedRuntimeSummary {
));
}
}
if let Some(value) = self.world_restore_issue_37_value {
if actual.world_restore_issue_37_value != Some(value) {
mismatches.push(format!(
"world_restore_issue_37_value mismatch: expected {value}, got {:?}",
actual.world_restore_issue_37_value
));
}
}
if let Some(value) = self.world_restore_issue_37_multiplier_raw_u32 {
if actual.world_restore_issue_37_multiplier_raw_u32 != Some(value) {
mismatches.push(format!(
"world_restore_issue_37_multiplier_raw_u32 mismatch: expected {value}, got {:?}",
actual.world_restore_issue_37_multiplier_raw_u32
));
}
}
if let Some(value) = &self.world_restore_issue_37_multiplier_value_f32_text {
if actual
.world_restore_issue_37_multiplier_value_f32_text
.as_ref()
!= Some(value)
{
mismatches.push(format!(
"world_restore_issue_37_multiplier_value_f32_text mismatch: expected {value:?}, got {:?}",
actual.world_restore_issue_37_multiplier_value_f32_text
));
}
}
if let Some(value) = self.world_restore_economic_tuning_mirror_raw_u32 {
if actual.world_restore_economic_tuning_mirror_raw_u32 != Some(value) {
mismatches.push(format!(
"world_restore_economic_tuning_mirror_raw_u32 mismatch: expected {value}, got {:?}",
actual.world_restore_economic_tuning_mirror_raw_u32
));
}
}
if let Some(value) = &self.world_restore_economic_tuning_mirror_value_f32_text {
if actual
.world_restore_economic_tuning_mirror_value_f32_text
.as_ref()
!= Some(value)
{
mismatches.push(format!(
"world_restore_economic_tuning_mirror_value_f32_text mismatch: expected {value:?}, got {:?}",
actual.world_restore_economic_tuning_mirror_value_f32_text
));
}
}
if let Some(count) = self.world_restore_economic_tuning_lane_count {
if actual.world_restore_economic_tuning_lane_count != count {
mismatches.push(format!(
"world_restore_economic_tuning_lane_count mismatch: expected {count}, got {}",
actual.world_restore_economic_tuning_lane_count
));
}
}
if let Some(values) = &self.world_restore_economic_tuning_lane_value_f32_text {
if &actual.world_restore_economic_tuning_lane_value_f32_text != values {
mismatches.push(format!(
"world_restore_economic_tuning_lane_value_f32_text mismatch: expected {values:?}, got {:?}",
actual.world_restore_economic_tuning_lane_value_f32_text
));
}
}
if let Some(kind) = &self.world_restore_absolute_counter_restore_kind {
if actual.world_restore_absolute_counter_restore_kind.as_ref() != Some(kind) {
mismatches.push(format!(
@ -1297,6 +1375,7 @@ mod tests {
"world_flag_count": 1,
"company_count": 1,
"event_runtime_record_count": 0,
"world_restore_economic_tuning_lane_count": 0,
"total_company_cash": 250000
}
}

View file

@ -27,6 +27,13 @@ pub struct RuntimeSummary {
pub world_restore_limited_track_building_amount: Option<i32>,
pub world_restore_economic_status_code: Option<i32>,
pub world_restore_territory_access_cost: Option<u32>,
pub world_restore_issue_37_value: Option<u32>,
pub world_restore_issue_37_multiplier_raw_u32: Option<u32>,
pub world_restore_issue_37_multiplier_value_f32_text: Option<String>,
pub world_restore_economic_tuning_mirror_raw_u32: Option<u32>,
pub world_restore_economic_tuning_mirror_value_f32_text: Option<String>,
pub world_restore_economic_tuning_lane_count: usize,
pub world_restore_economic_tuning_lane_value_f32_text: Vec<String>,
pub world_restore_absolute_counter_restore_kind: Option<String>,
pub world_restore_absolute_counter_adjustment_context: Option<String>,
pub metadata_count: usize,
@ -169,6 +176,29 @@ impl RuntimeSummary {
.limited_track_building_amount,
world_restore_economic_status_code: state.world_restore.economic_status_code,
world_restore_territory_access_cost: state.world_restore.territory_access_cost,
world_restore_issue_37_value: state.world_restore.issue_37_value,
world_restore_issue_37_multiplier_raw_u32: state
.world_restore
.issue_37_multiplier_raw_u32,
world_restore_issue_37_multiplier_value_f32_text: state
.world_restore
.issue_37_multiplier_value_f32_text
.clone(),
world_restore_economic_tuning_mirror_raw_u32: state
.world_restore
.economic_tuning_mirror_raw_u32,
world_restore_economic_tuning_mirror_value_f32_text: state
.world_restore
.economic_tuning_mirror_value_f32_text
.clone(),
world_restore_economic_tuning_lane_count: state
.world_restore
.economic_tuning_lane_raw_u32
.len(),
world_restore_economic_tuning_lane_value_f32_text: state
.world_restore
.economic_tuning_lane_value_f32_text
.clone(),
world_restore_absolute_counter_restore_kind: state
.world_restore
.absolute_counter_restore_kind
@ -995,6 +1025,100 @@ mod tests {
);
}
#[test]
fn summarizes_save_world_issue_and_economic_tuning_restore_state() {
let state = RuntimeState {
calendar: CalendarPoint {
year: 1830,
month_slot: 0,
phase_slot: 0,
tick_slot: 0,
},
world_flags: BTreeMap::new(),
save_profile: RuntimeSaveProfileState::default(),
world_restore: RuntimeWorldRestoreState {
issue_37_value: Some(3),
issue_37_multiplier_raw_u32: Some(0x3d75c28f),
issue_37_multiplier_value_f32_text: Some("0.06".to_string()),
economic_tuning_mirror_raw_u32: Some(0x3f46dff5),
economic_tuning_mirror_value_f32_text: Some("0.7766201".to_string()),
economic_tuning_lane_raw_u32: vec![
0x3f400000, 0x3be56042, 0x3c03126f, 0x3c1374bc, 0x3c23d70a, 0x3c23d70a,
],
economic_tuning_lane_value_f32_text: vec![
"0.75".to_string(),
"0.007".to_string(),
"0.008".to_string(),
"0.009".to_string(),
"0.01".to_string(),
"0.01".to_string(),
],
..RuntimeWorldRestoreState::default()
},
metadata: BTreeMap::new(),
companies: Vec::new(),
selected_company_id: None,
players: Vec::new(),
selected_player_id: None,
chairman_profiles: Vec::new(),
selected_chairman_profile_id: None,
trains: Vec::new(),
locomotive_catalog: Vec::new(),
cargo_catalog: Vec::new(),
territories: Vec::new(),
company_territory_track_piece_counts: Vec::new(),
company_territory_access: Vec::new(),
packed_event_collection: None,
event_runtime_records: Vec::new(),
candidate_availability: BTreeMap::new(),
named_locomotive_availability: BTreeMap::new(),
named_locomotive_cost: BTreeMap::new(),
cargo_production_overrides: BTreeMap::new(),
named_cargo_price_overrides: BTreeMap::new(),
all_cargo_price_override: None,
named_cargo_production_overrides: BTreeMap::new(),
all_cargo_production_override: None,
factory_cargo_production_override: None,
farm_mine_cargo_production_override: None,
world_runtime_variables: BTreeMap::new(),
company_runtime_variables: BTreeMap::new(),
player_runtime_variables: BTreeMap::new(),
territory_runtime_variables: BTreeMap::new(),
world_scalar_overrides: BTreeMap::new(),
special_conditions: BTreeMap::new(),
service_state: RuntimeServiceState::default(),
};
let summary = RuntimeSummary::from_state(&state);
assert_eq!(summary.world_restore_issue_37_value, Some(3));
assert_eq!(
summary.world_restore_issue_37_multiplier_raw_u32,
Some(0x3d75c28f)
);
assert_eq!(
summary
.world_restore_issue_37_multiplier_value_f32_text
.as_deref(),
Some("0.06")
);
assert_eq!(
summary.world_restore_economic_tuning_mirror_raw_u32,
Some(0x3f46dff5)
);
assert_eq!(
summary
.world_restore_economic_tuning_mirror_value_f32_text
.as_deref(),
Some("0.7766201")
);
assert_eq!(summary.world_restore_economic_tuning_lane_count, 6);
assert_eq!(
summary.world_restore_economic_tuning_lane_value_f32_text,
vec!["0.75", "0.007", "0.008", "0.009", "0.01", "0.01"]
);
}
#[test]
fn counts_active_companies_separately_from_total_companies() {
let state = RuntimeState {