feat(core): derive PartialEq/Eq on Grid<T> and Map
Lets downstream determinism tests compare maps with `assert_eq!` instead of a serde-string workaround. Auto-gated on T (Grid<f32> gets only PartialEq); Map has no float fields so Eq is sound. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
659ef00017
commit
8c4ef2ed4d
2 changed files with 10 additions and 7 deletions
|
|
@ -23,8 +23,11 @@ use crate::geometry::{Point, Rect};
|
||||||
///
|
///
|
||||||
/// `Serialize`/`Deserialize` are available whenever `T` itself supports them,
|
/// `Serialize`/`Deserialize` are available whenever `T` itself supports them,
|
||||||
/// so a `Grid<Tile>` can round-trip through serde while a `Grid<SomeNonSerde>`
|
/// so a `Grid<Tile>` can round-trip through serde while a `Grid<SomeNonSerde>`
|
||||||
/// simply does not gain those impls.
|
/// simply does not gain those impls. Likewise `PartialEq`/`Eq` are derived and
|
||||||
#[derive(Clone, Debug, Serialize, Deserialize)]
|
/// auto-gated on `T`: `Grid<Tile>` is fully `Eq` (so two maps can be compared
|
||||||
|
/// directly for determinism tests), while a `Grid<f32>` scratch buffer gains
|
||||||
|
/// only `PartialEq`.
|
||||||
|
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
|
||||||
pub struct Grid<T> {
|
pub struct Grid<T> {
|
||||||
width: u32,
|
width: u32,
|
||||||
height: u32,
|
height: u32,
|
||||||
|
|
|
||||||
|
|
@ -38,11 +38,11 @@ pub enum Tile {
|
||||||
/// data directly; the type intentionally holds nothing visual. The `seed` is
|
/// data directly; the type intentionally holds nothing visual. The `seed` is
|
||||||
/// retained for reproducibility — the same seed reproduces this exact map.
|
/// retained for reproducibility — the same seed reproduces this exact map.
|
||||||
///
|
///
|
||||||
/// `Map` does not derive `PartialEq`/`Eq` because its `tiles: Grid<Tile>` does
|
/// `Map` derives `PartialEq`/`Eq`: it has no float fields and `Grid<Tile>` is
|
||||||
/// not (the [`crate::grid::Grid`] storage type is generic and only derives the
|
/// `Eq`, so two maps generated from the same seed can be compared directly with
|
||||||
/// comparison traits where it chooses to). Equality of two maps is established
|
/// `==` — the cleanest expression of the determinism contract (spec §7). The
|
||||||
/// via their serde representation instead — see the round-trip test.
|
/// serde round-trip test additionally checks byte-stable JSON.
|
||||||
#[derive(Clone, Debug, Serialize, Deserialize)]
|
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
|
||||||
pub struct Map {
|
pub struct Map {
|
||||||
/// The base terrain layer: what tile occupies each cell.
|
/// The base terrain layer: what tile occupies each cell.
|
||||||
pub tiles: Grid<Tile>,
|
pub tiles: Grid<Tile>,
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue