test(proptest): add property-based tests for invariants
Adds proptest as a dev-dependency and a `tests/properties.rs` integration suite that probes invariants on randomly generated inputs: Pareto invariants: - `pareto_compare` is anti-symmetric: A→B is opposite of B→A for Dominates / DominatedBy - `pareto_compare` is reflexive on equal candidates (returns Equal) - `pareto_front` output is internally non-dominated - `non_dominated_sort` puts every member into exactly one front - `crowding_distance` returns Vec same length as front; boundary points are infinity for fronts of size ≥ 2 in any axis-sortable configuration Operator invariants: - `SimulatedBinaryCrossover` returns 2 children of the right length, all in bounds - `PolynomialMutation` returns 1 child of the right length, in bounds - `BoundedGaussianMutation` returns 1 child in bounds - `ClampToBounds` repair always lands in bounds - `ProjectToSimplex` repair always sums to total and is non-negative Algorithm invariants: - For any seed, `Optimizer::run` is deterministic across two calls - Final population has the documented size for population-based algorithms These are the invariants the existing 226 fixed-input unit tests collectively check; proptest gives us coverage on inputs they don't cover individually.
This commit is contained in:
@@ -26,6 +26,7 @@ serde = { version = "1", features = ["derive"], optional = true }
|
||||
|
||||
[dev-dependencies]
|
||||
gungraun = "0.18"
|
||||
proptest = "1"
|
||||
|
||||
[[bench]]
|
||||
name = "hot_paths"
|
||||
|
||||
Reference in New Issue
Block a user