Skip to content

Add tests for progressive containers and ProgressiveMerkleHasher - #50

Merged
michaelsproul merged 37 commits into
sigp:mainfrom
eserilev:progressive-tests
Aug 18, 2026
Merged

Add tests for progressive containers and ProgressiveMerkleHasher#50
michaelsproul merged 37 commits into
sigp:mainfrom
eserilev:progressive-tests

Conversation

@eserilev

Copy link
Copy Markdown
Member

Extend the differential property tests (#47) and derive macro tests (#48) to cover the new functionality in the progressive branch:

  • Property test ProgressiveMerkleHasher against a recursive reference implementation of EIP-7916 merkleize_progressive, with random byte lengths and random write splits to exercise the partial-chunk carry buffer, up to 128 chunks to cross all early level boundaries.
  • Property test ProgressiveBitList hashing against the same reference with independent bit packing, covering the empty-list workaround.
  • Derive tests for progressive containers: skip_hashing interaction, nesting (both directions), generics, tree_hash_type, a six-field container crossing a progressive level boundary, and active_fields spanning multiple bytes.
  • Hard-coded roots for the level-crossing and multi-byte cases computed independently from the EIP pseudocode, so these tests do not rely on the hasher under test.

Claude-Session: https://claude.ai/code/session_017PpXigbebk4GAQ9D9qdFzU

Copilot AI and others added 30 commits December 8, 2025 02:50
Co-authored-by: michaelsproul <4452260+michaelsproul@users.noreply.github.com>
Co-authored-by: michaelsproul <4452260+michaelsproul@users.noreply.github.com>
Co-authored-by: michaelsproul <4452260+michaelsproul@users.noreply.github.com>
Co-authored-by: michaelsproul <4452260+michaelsproul@users.noreply.github.com>
… stream in

Co-authored-by: michaelsproul <4452260+michaelsproul@users.noreply.github.com>
…er method

Co-authored-by: michaelsproul <4452260+michaelsproul@users.noreply.github.com>
…inary tree hashing

Co-authored-by: michaelsproul <4452260+michaelsproul@users.noreply.github.com>
michaelsproul and others added 5 commits July 27, 2026 16:12
Previously the consistency check between variant-level `tree_hash` and
`ssz` attributes compared the whole parsed `VariantOpts` structs. Since
both parsers tolerate unknown keys, an attribute that is present but does
not set `selector` (e.g. one carrying only ssz-specific keys) would parse
as `selector: None` and spuriously fail the consistency assertion against
the other attribute's explicit selector.

Merge the two attributes field-by-field instead, asserting consistency
only when both actually set a selector.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The variant checks in the transparent and union derive paths only
verified the field *count*, so a single named-field variant like
`A { x: u8 }` passed the check and then failed with a confusing
"expected tuple struct" error in the generated match pattern.

Check explicitly for a single unnamed field and panic with a proper
message naming the offending variant.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Regular unions already panic with "0-variant union is not permitted"
(via `compute_union_selectors`), but a 0-variant compatible union slipped
through selector validation and instead failed on the generated
`match self {}`, which is not exhaustive for `&Self` even when `Self` is
uninhabited. Panic with the same message as the regular union path.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
A `selector` attribute on a variant of a transparent enum was silently
ignored, because `parse_variant_opts` was only called from the union
derive path. Transparent enums never mix in a selector, so a manual one
is a configuration error: reject it in the same way that the regular
"union" behaviour already does.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Extend the differential property tests (sigp#47) and derive macro tests (sigp#48)
to cover the new functionality in the progressive branch:

- Property test ProgressiveMerkleHasher against a recursive reference
  implementation of EIP-7916 merkleize_progressive, with random byte
  lengths and random write splits to exercise the partial-chunk carry
  buffer, up to 128 chunks to cross all early level boundaries.
- Property test ProgressiveBitList hashing against the same reference
  with independent bit packing, covering the empty-list workaround.
- Derive tests for progressive containers: skip_hashing interaction,
  nesting (both directions), generics, tree_hash_type, a six-field
  container crossing a progressive level boundary, and active_fields
  spanning multiple bytes.
- Hard-coded roots for the level-crossing and multi-byte cases computed
  independently from the EIP pseudocode, so these tests do not rely on
  the hasher under test.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017PpXigbebk4GAQ9D9qdFzU
@eserilev

Copy link
Copy Markdown
Member Author

@macladson was thinking of merging this into the progressive branch to add a bit more test coverage if that';s cool with you

@codecov

codecov Bot commented Jul 28, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 93.64%. Comparing base (3b965cd) to head (be57462).

Additional details and impacted files
@@            Coverage Diff             @@
##             main      #50      +/-   ##
==========================================
+ Coverage   92.49%   93.64%   +1.14%     
==========================================
  Files           8        8              
  Lines         626      739     +113     
==========================================
+ Hits          579      692     +113     
  Misses         47       47              

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@michaelsproul
michaelsproul changed the base branch from progressive to main August 18, 2026 01:21

@michaelsproul michaelsproul left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nice test coverage, thanks!

@michaelsproul
michaelsproul merged commit e9e3a1b into sigp:main Aug 18, 2026
8 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants