You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
This commit was created on GitHub.com and signed with GitHub’s verified signature.
Changed: a shrink candidate is accepted only when it fails the same way
the original run did — the same exception class and the same place in the
property's own file. A body that can fail in more than one place (two
assertions, or an assertion beside a call that throws the same type) used to
offer the descent failures it could not tell apart, so the reported minimal
counterexample could belong to a bug the run never found, with nothing in the
output saying so. The place is the line of the property's own file in the
failure's stack, which is not where the exception was raised: an assertion
library raises every assertion of a body from one line of its own, while the
line that called in is the assertion the body wrote. Where the place cannot be read —
an id that names no loaded class, a body written in another file (a trait, an
included fixture), a failure the engine raised rather than the body — the
exception class stays the whole criterion. Minimised counterexamples may
therefore differ from 1.0.0 on such a body (compatibility policy §2: what a
descent minimises to is not under SemVer); a corpus recorded before this
release replays unchanged. Worth knowing for stateful properties: the
rule-based façade's #[Rule] methods live in the test file, so a command
sequence whose failure moves from one rule to another now stops the descent
rather than being minimised into the other rule's bug.