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.
8 lines
466 B
Plaintext
8 lines
466 B
Plaintext
# Seeds for failure cases proptest has generated in the past. It is
|
|
# automatically read and these particular cases re-run before any
|
|
# novel cases are generated.
|
|
#
|
|
# It is recommended to check this file in to source control so that
|
|
# everyone who runs the test benefits from these saved cases.
|
|
cc acfcf5a06625012c4adedfcd5213ab619837031ad52382c69d7a1ee409cc934b # shrinks to bounds = [(0.0, 0.001), (0.0, 0.001), (0.0, 0.001)], eta = 1.0, per_var_p = 0.0, seed = 0
|