Skip to content

chore(deps)(deps): bump hegeltest from 0.8.1 to 0.18.0 in the testing group#135

Closed
dependabot[bot] wants to merge 1 commit into
mainfrom
dependabot/cargo/testing-863274acc2
Closed

chore(deps)(deps): bump hegeltest from 0.8.1 to 0.18.0 in the testing group#135
dependabot[bot] wants to merge 1 commit into
mainfrom
dependabot/cargo/testing-863274acc2

Conversation

@dependabot

@dependabot dependabot Bot commented on behalf of github Jun 15, 2026

Copy link
Copy Markdown

Bumps the testing group with 1 update: hegeltest.

Updates hegeltest from 0.8.1 to 0.18.0

Release notes

Sourced from hegeltest's releases.

v0.18.0

This release improves how failing runs are reported, separates "the property failed" from "the run itself failed", and fixes a bug where Verbosity::Quiet would not always be respected when reporting the final error.

A failing run now ends by re-raising the failing test's own panic — payload intact, so #[should_panic(expected = ...)] and catch_unwind consumers see exactly what the test raised — instead of a synthetic Property test failed: <message> panic, and the failure no longer prints a second time after the report. Runs that find several distinct bugs still fail with the "... N distinct failures." message.

v0.17.4

This patch restructures the native engine into a single Engine object mirroring Hypothesis's ConjectureRunner: one owner for the executor, the RNG, the example database, the choice tree, the per-origin failing examples, and all run-level counters, with every executed test case recorded through one test_function path. Previously each phase (generation, database reuse, targeting, span mutation) kept its own copy of the counter updates, which had already let the same accounting bug appear in two places.

Three small behavioural unifications come with it, all matching Hypothesis: database-reuse replays and targeting trials now count toward the same budgets as generated examples (and feed the choice tree, so generation starts informed by what replays explored — and a generator that is non-deterministic across replays is now reported); span mutation only runs once the health-check warm-up is over; and generation is skipped entirely when a database replay already reproduced a failure, so known failures are reported as fast as possible.

v0.17.3

This release fixes a large number of bugs found by auditing the native engine against the Hypothesis implementation it is ported from, and adds one new float feature. Generated distributions change noticeably, and a few previously-silent invalid argument combinations now raise errors, so test suites may see different examples after upgrading.

Generation fixes:

  • Integer and string draws were dominated by the "interesting constants" pool: for wide integer ranges (e.g. the full i64 range) every draw came from a pool of ~500 constants and the intended heavy-tailed distribution never ran, and for permissive alphabets ~60% of strings were pool constants. The pool probability is now capped.
  • The default gs::floats() generator returned exactly f64::MAX for ~90% of draws (the bounded draw's range-width computation overflowed to infinity). Bounded float draws now use Hypothesis's actual scheme — a lex-ordered draw biased toward simple values, clamped into range — so bounded ranges also regain mass on integers and simple fractions.
  • exclude_min/exclude_max were silently ignored for infinite bounds: min_value(f64::NEG_INFINITY).exclude_min(true) (the Hypothesis idiom for "any float except -inf") kept -inf generable. Excluding an infinite bound now steps it to ±f64::MAX, and an exclusive bound without the corresponding bound now raises InvalidArgument, as Hypothesis does.
  • Unicode category filters were truncated to the Basic Multilingual Plane: exclude_categories could still generate astral members of an excluded category (e.g. plane-15/16 private-use characters for Co), and categories silently dropped astral members (all emoji for So). Category sets now cover the whole codespace.
  • text().codec("ascii").include_characters("é") silently generated é; include characters the codec cannot encode now raise InvalidArgument.

New feature: gs::floats().allow_subnormal(false) excludes subnormal ("denormalised") values, for testing code that may run with flush-to-zero floating point (e.g. compiled with -ffast-math), where subnormal inputs silently become zero. As in Hypothesis, the setting is inferred from the bounds when unset, and contradictory combinations raise InvalidArgument. This adds an optional smallest_nonzero_magnitude field to the float schema; schemas without it behave exactly as before.

Regex fixes:

  • Character-class ranges with escaped endpoints ([\x00-\x1f], [\--/], …) were rejected with "bad character range"; they now parse exactly as CPython does.
  • Under (?i), literals with multi-codepoint case mappings could generate strings the pattern does not match (e.g. (?i)ß generated 'S'), and negated classes only excluded the one-step case swap ((?i)[^İ] could generate 'I'). Both now follow CPython's case-equivalence rules.
  • Very large character classes (hundreds of thousands of codepoints) no longer take quadratic time to expand.

Engine fixes:

  • A failure could be masked by a health check: once a bug was found, continued generation could trip FilterTooMuch/TooSlow/TestCasesTooLarge and report that instead of the bug. Health checks are now disabled from the first failure, as in Hypothesis.
  • Failing examples counted against the test_cases budget as if they were valid examples; they no longer do.
  • Database replay treated a stored example as stale if the test now draws even one more choice than the entry holds, deleting entries that still reproduce; replay now extends past the stored prefix with fresh draws.
  • The secondary example corpus (where displaced failing examples are downgraded) was written but never read, and grew without bound. The reuse phase now samples it when the primary corpus comes up short, and the shrink phase drains stale entries, matching Hypothesis.
  • A bug with a new panic site discovered while shrinking another bug was silently discarded; it is now shrunk and reported alongside the others.
  • phases = [Phase::Reuse] (without Phase::Generate) silently did nothing; phases are now independent, so reuse-only runs replay stored counterexamples.
  • A failing test that drew floats from a fraction-only range such as min_value(0.1).max_value(0.9) crashed the whole run with a BigUint underflow panic as soon as the shrinker touched the float. The float index computation behind this is now exact.
  • The choice tree treated forced choices (e.g. a collection's size-boundary continuation decisions) as full-width branch points, so the search space behind any collection never registered as exhausted and "novel" prefixes could silently revisit explored territory.

Shrinking fixes:

... (truncated)

Changelog

Sourced from hegeltest's changelog.

0.18.0 - 2026-06-12

This release improves how failing runs are reported, separates "the property failed" from "the run itself failed", and fixes a bug where Verbosity::Quiet would not always be respected when reporting the final error.

A failing run now ends by re-raising the failing test's own panic — payload intact, so #[should_panic(expected = ...)] and catch_unwind consumers see exactly what the test raised — instead of a synthetic Property test failed: <message> panic, and the failure no longer prints a second time after the report. Runs that find several distinct bugs still fail with the "... N distinct failures." message.

0.17.4 - 2026-06-10

This patch restructures the native engine into a single Engine object mirroring Hypothesis's ConjectureRunner: one owner for the executor, the RNG, the example database, the choice tree, the per-origin failing examples, and all run-level counters, with every executed test case recorded through one test_function path. Previously each phase (generation, database reuse, targeting, span mutation) kept its own copy of the counter updates, which had already let the same accounting bug appear in two places.

Three small behavioural unifications come with it, all matching Hypothesis: database-reuse replays and targeting trials now count toward the same budgets as generated examples (and feed the choice tree, so generation starts informed by what replays explored — and a generator that is non-deterministic across replays is now reported); span mutation only runs once the health-check warm-up is over; and generation is skipped entirely when a database replay already reproduced a failure, so known failures are reported as fast as possible.

0.17.3 - 2026-06-10

This release fixes a large number of bugs found by auditing the native engine against the Hypothesis implementation it is ported from, and adds one new float feature. Generated distributions change noticeably, and a few previously-silent invalid argument combinations now raise errors, so test suites may see different examples after upgrading.

Generation fixes:

  • Integer and string draws were dominated by the "interesting constants" pool: for wide integer ranges (e.g. the full i64 range) every draw came from a pool of ~500 constants and the intended heavy-tailed distribution never ran, and for permissive alphabets ~60% of strings were pool constants. The pool probability is now capped.
  • The default gs::floats() generator returned exactly f64::MAX for ~90% of draws (the bounded draw's range-width computation overflowed to infinity). Bounded float draws now use Hypothesis's actual scheme — a lex-ordered draw biased toward simple values, clamped into range — so bounded ranges also regain mass on integers and simple fractions.
  • exclude_min/exclude_max were silently ignored for infinite bounds: min_value(f64::NEG_INFINITY).exclude_min(true) (the Hypothesis idiom for "any float except -inf") kept -inf generable. Excluding an infinite bound now steps it to ±f64::MAX, and an exclusive bound without the corresponding bound now raises InvalidArgument, as Hypothesis does.
  • Unicode category filters were truncated to the Basic Multilingual Plane: exclude_categories could still generate astral members of an excluded category (e.g. plane-15/16 private-use characters for Co), and categories silently dropped astral members (all emoji for So). Category sets now cover the whole codespace.
  • text().codec("ascii").include_characters("é") silently generated é; include characters the codec cannot encode now raise InvalidArgument.

New feature: gs::floats().allow_subnormal(false) excludes subnormal ("denormalised") values, for testing code that may run with flush-to-zero floating point (e.g. compiled with -ffast-math), where subnormal inputs silently become zero. As in Hypothesis, the setting is inferred from the bounds when unset, and contradictory combinations raise InvalidArgument. This adds an optional smallest_nonzero_magnitude field to the float schema; schemas without it behave exactly as before.

Regex fixes:

  • Character-class ranges with escaped endpoints ([\x00-\x1f], [\--/], …) were rejected with "bad character range"; they now parse exactly as CPython does.
  • Under (?i), literals with multi-codepoint case mappings could generate strings the pattern does not match (e.g. (?i)ß generated 'S'), and negated classes only excluded the one-step case swap ((?i)[^İ] could generate 'I'). Both now follow CPython's case-equivalence rules.
  • Very large character classes (hundreds of thousands of codepoints) no longer take quadratic time to expand.

Engine fixes:

  • A failure could be masked by a health check: once a bug was found, continued generation could trip FilterTooMuch/TooSlow/TestCasesTooLarge and report that instead of the bug. Health checks are now disabled from the first failure, as in Hypothesis.
  • Failing examples counted against the test_cases budget as if they were valid examples; they no longer do.
  • Database replay treated a stored example as stale if the test now draws even one more choice than the entry holds, deleting entries that still reproduce; replay now extends past the stored prefix with fresh draws.
  • The secondary example corpus (where displaced failing examples are downgraded) was written but never read, and grew without bound. The reuse phase now samples it when the primary corpus comes up short, and the shrink phase drains stale entries, matching Hypothesis.
  • A bug with a new panic site discovered while shrinking another bug was silently discarded; it is now shrunk and reported alongside the others.
  • phases = [Phase::Reuse] (without Phase::Generate) silently did nothing; phases are now independent, so reuse-only runs replay stored counterexamples.
  • A failing test that drew floats from a fraction-only range such as min_value(0.1).max_value(0.9) crashed the whole run with a BigUint underflow panic as soon as the shrinker touched the float. The float index computation behind this is now exact.
  • The choice tree treated forced choices (e.g. a collection's size-boundary continuation decisions) as full-width branch points, so the search space behind any collection never registered as exhausted and "novel" prefixes could silently revisit explored territory.

... (truncated)

Commits
  • add5f14 Bump to version 0.18.0 and update changelog
  • 3b7dc33 Merge pull request #329 from hegeldev/DRMacIver/multiple-counterexamples
  • cdab013 Fix the second review round: gate ordering, single-case seeds, internal asserts
  • cbe0a0e Re-raise the failing test's own panic instead of a synthetic one
  • eec503a Update release
  • 1e12f96 Add release notes for the reporting and run-error rework
  • 272606c Cover the embedding single-case branch; drop drive_single's dead reproducer line
  • b41405c Fix small lifecycle warts: context guard, span-error symmetry, doc rot
  • 031623d Hoist SingleTestCase out of the TestRunner machinery
  • fc113c4 Delete the got_interesting safety net and TestRunResult.passed
  • Additional commits viewable in compare view

Dependabot compatibility score

Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


Dependabot commands and options

You can trigger Dependabot actions by commenting on this PR:

  • @dependabot rebase will rebase this PR
  • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
  • @dependabot show <dependency name> ignore conditions will show all of the ignore conditions of the specified dependency
  • @dependabot ignore <dependency name> major version will close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself)
  • @dependabot ignore <dependency name> minor version will close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself)
  • @dependabot ignore <dependency name> will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself)
  • @dependabot unignore <dependency name> will remove all of the ignore conditions of the specified dependency
  • @dependabot unignore <dependency name> <ignore condition> will remove the ignore condition of the specified dependency and ignore conditions

Bumps the testing group with 1 update: [hegeltest](https://github.com/hegeldev/hegel-rust).


Updates `hegeltest` from 0.8.1 to 0.18.0
- [Release notes](https://github.com/hegeldev/hegel-rust/releases)
- [Changelog](https://github.com/hegeldev/hegel-rust/blob/main/CHANGELOG.md)
- [Commits](hegeldev/hegel-rust@v0.8.1...v0.18.0)

---
updated-dependencies:
- dependency-name: hegeltest
  dependency-version: 0.18.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: testing
...

Signed-off-by: dependabot[bot] <support@github.com>
@dependabot dependabot Bot added area/build Build / clippy / cargo deny kind/chore Build / tooling / dep maintenance labels Jun 15, 2026
@dependabot
dependabot Bot requested a review from copyleftdev as a code owner June 15, 2026 14:10
@dependabot dependabot Bot added kind/chore Build / tooling / dep maintenance area/build Build / clippy / cargo deny labels Jun 15, 2026
@dependabot @github

dependabot Bot commented on behalf of github Jul 6, 2026

Copy link
Copy Markdown
Author

Looks like hegeltest is updatable in another way, so this is no longer needed.

@dependabot dependabot Bot closed this Jul 6, 2026
@dependabot
dependabot Bot deleted the dependabot/cargo/testing-863274acc2 branch July 6, 2026 14:10
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area/build Build / clippy / cargo deny kind/chore Build / tooling / dep maintenance

Projects

None yet

Development

Successfully merging this pull request may close these issues.

0 participants