diff --git a/src/simulator/crates/mc-save/tests/round_trip.rs b/src/simulator/crates/mc-save/tests/round_trip.rs index 5828333d..d28df075 100644 --- a/src/simulator/crates/mc-save/tests/round_trip.rs +++ b/src/simulator/crates/mc-save/tests/round_trip.rs @@ -190,12 +190,30 @@ fn hydrology_resolve_mutations_round_trip_byte_equal() { let bytes = save(&sf).expect("save after re-solve"); let loaded = load(&bytes).expect("load after re-solve"); - let original_json = serde_json::to_string(&sf.grid).expect("ser original"); - let loaded_json = serde_json::to_string(&loaded.grid).expect("ser loaded"); + // Tiles are an ordered Vec - byte-equal compare covers the five mutated + // hydrology fields + river_edges on every tile. + let original_tiles = serde_json::to_string(&sf.grid.tiles).expect("ser original tiles"); + let loaded_tiles = serde_json::to_string(&loaded.grid.tiles).expect("ser loaded tiles"); assert_eq!( - original_json, loaded_json, - "post-re-solve grid (mutated river_edges + lakes + riparian + \ - edge_features) must survive save->load byte-equal" + original_tiles, loaded_tiles, + "post-re-solve tiles (mutated river_edges + lakes + riparian) must \ + survive save->load byte-equal" + ); + // edge_features is a HashMap (nondeterministic iteration order), so + // compare as sorted pair sets. + let sort_edges = |g: &GridState| { + let mut pairs: Vec<_> = g + .edge_features + .iter() + .map(|(k, v)| (format!("{k:?}"), *v)) + .collect(); + pairs.sort_by(|a, b| a.0.cmp(&b.0)); + pairs + }; + assert_eq!( + sort_edges(&sf.grid), + sort_edges(&loaded.grid), + "post-re-solve edge_features (river flags) must survive save->load" ); // Spot-check the dam-attributable mutations specifically. let (lc, lr, _) = delta.added_lake_cells[0];