Tighten static cargo and selection context proofs

This commit is contained in:
Jan Petykiewicz 2026-04-17 11:26:07 -07:00
commit b06abb24a7
12 changed files with 507 additions and 19 deletions

View file

@ -4238,6 +4238,41 @@ mod tests {
}
}
fn real_stock_prices_shell_row(
value: i32,
) -> crate::SmpLoadedPackedEventGroupedEffectRowSummary {
crate::SmpLoadedPackedEventGroupedEffectRowSummary {
group_index: 0,
row_index: 0,
descriptor_id: 55,
descriptor_label: Some("Stock Prices".to_string()),
target_mask_bits: Some(0x0b),
parameter_family: Some("company_finance_shell_scalar".to_string()),
grouped_target_subject: Some("company".to_string()),
grouped_target_scope: Some("selected_company".to_string()),
opcode: 3,
raw_scalar_value: value,
value_byte_0x09: 0,
value_dword_0x0d: 0,
value_byte_0x11: 0,
value_byte_0x12: 0,
value_word_0x14: 0,
value_word_0x16: 0,
row_shape: "scalar_assignment".to_string(),
semantic_family: Some("scalar_assignment".to_string()),
semantic_preview: Some(format!("Set Stock Prices to {value}")),
recovered_cargo_slot: None,
recovered_cargo_class: None,
recovered_cargo_label: None,
recovered_locomotive_id: None,
locomotive_name: None,
notes: vec![
"descriptor is recovered in the checked-in effect table as shell_owned parity"
.to_string(),
],
}
}
fn real_deactivate_player_row(
enabled: bool,
) -> crate::SmpLoadedPackedEventGroupedEffectRowSummary {
@ -7179,8 +7214,11 @@ mod tests {
standalone_condition_row_count: 0,
standalone_condition_rows: Vec::new(),
negative_sentinel_scope: None,
grouped_effect_row_counts: vec![1, 0, 0, 0],
grouped_effect_rows: vec![real_merger_premium_shell_row(25)],
grouped_effect_row_counts: vec![2, 0, 0, 0],
grouped_effect_rows: vec![
real_stock_prices_shell_row(120),
real_merger_premium_shell_row(25),
],
decoded_conditions: Vec::new(),
decoded_actions: Vec::new(),
executable_import_ready: false,
@ -8494,6 +8532,15 @@ mod tests {
.and_then(|summary| summary.records[0].import_outcome.as_deref()),
Some("blocked_evidence_blocked_descriptor")
);
assert_eq!(
import
.state
.packed_event_collection
.as_ref()
.and_then(|summary| summary.records[0].grouped_effect_rows.first())
.and_then(|row| row.descriptor_label.as_deref()),
Some("Named Cargo Price Slot 1")
);
}
#[test]

View file

@ -11852,17 +11852,32 @@ mod tests {
}
#[test]
fn classifies_shell_owned_finance_descriptor_from_checked_in_effect_table() {
let metadata =
real_grouped_effect_descriptor_metadata(58).expect("descriptor metadata should exist");
assert_eq!(metadata.label, "Merger Premium");
assert_eq!(metadata.parameter_family, "company_finance_shell_scalar");
fn classifies_shell_owned_finance_descriptors_from_checked_in_effect_table() {
let stock_prices =
real_grouped_effect_descriptor_metadata(55).expect("descriptor metadata should exist");
assert_eq!(stock_prices.label, "Stock Prices");
assert_eq!(
real_grouped_effect_runtime_status_name(metadata.runtime_status),
stock_prices.parameter_family,
"company_finance_shell_scalar"
);
assert_eq!(
real_grouped_effect_runtime_status_name(stock_prices.runtime_status),
"shell_owned"
);
assert!(!metadata.executable_in_runtime);
assert!(!stock_prices.executable_in_runtime);
let merger_premium =
real_grouped_effect_descriptor_metadata(58).expect("descriptor metadata should exist");
assert_eq!(merger_premium.label, "Merger Premium");
assert_eq!(
merger_premium.parameter_family,
"company_finance_shell_scalar"
);
assert_eq!(
real_grouped_effect_runtime_status_name(merger_premium.runtime_status),
"shell_owned"
);
assert!(!merger_premium.executable_in_runtime);
}
#[test]
@ -12065,6 +12080,18 @@ mod tests {
assert!(metadata.executable_in_runtime);
}
#[test]
fn looks_up_named_cargo_price_slot_descriptor_metadata() {
let metadata =
real_grouped_effect_descriptor_metadata(106).expect("descriptor metadata should exist");
assert_eq!(metadata.label, "Named Cargo Price Slot 1");
assert_eq!(metadata.target_mask_bits, 0x08);
assert_eq!(metadata.parameter_family, "cargo_price_scalar");
assert_eq!(metadata.runtime_key, None);
assert!(!metadata.executable_in_runtime);
}
#[test]
fn looks_up_runtime_variable_descriptor_metadata() {
let metadata =
@ -12201,6 +12228,33 @@ mod tests {
);
}
#[test]
fn parses_named_cargo_price_row_with_stable_slot_label() {
let row_bytes = build_real_grouped_effect_row(RealGroupedEffectRowSpec {
descriptor_id: 106,
raw_scalar_value: 140,
opcode: 3,
value_byte_0x09: 0,
value_dword_0x0d: 0,
value_byte_0x11: 0,
value_byte_0x12: 0,
value_word_0x14: 0,
value_word_0x16: 0,
locomotive_name: None,
});
let row = parse_real_grouped_effect_row_summary(&row_bytes, 0, 0, None)
.expect("row should parse");
assert_eq!(row.descriptor_id, 106);
assert_eq!(
row.descriptor_label.as_deref(),
Some("Named Cargo Price Slot 1")
);
assert_eq!(row.recovered_cargo_label, None);
assert_eq!(row.parameter_family.as_deref(), Some("cargo_price_scalar"));
}
#[test]
fn looks_up_recovered_locomotive_policy_descriptor_metadata() {
let metadata =