Open
Conversation
4e192e2 to
6d67dbc
Compare
Contributor
There was a problem hiding this comment.
Pull request overview
This PR adds AntiGen decision points to the CDDL prelude term generators in the cuddle library, so that when "zapped" (fault-injected), the primitive type will change to a completely different type, producing more effective negative test cases. The PR also refactors genForCTree to add withAnnotation calls for better debugging output, adds positive generator tests, and upgrades the antigen dependency from 0.3.x to 0.4.x.
Changes:
- Refactored
genPostludeto use a two-phase approach:faultyPTermselects the type (with fault injection to swap types when zapped), thengenPTermgenerates a value for that type - Added
withAnnotationcalls throughoutgenForCTreefor better tracing/debugging of generator decisions - Added positive generator tests (
genAndValidateHuddle) and extracted reusable test helpers (genAndValidateRule,genAndValidateCddl) fromValidator.hs
Reviewed changes
Copilot reviewed 6 out of 8 changed files in this pull request and generated 2 comments.
Show a summary per file
| File | Description |
|---|---|
src/Codec/CBOR/Cuddle/CBOR/Gen.hs |
Refactored genPostlude with type-level fault injection, added withAnnotation throughout genForCTree, generalized genTerm/genSized signatures to MonadGen |
src/Codec/CBOR/Cuddle/CDDL/CTree.hs |
Added Enum, Bounded, and Arbitrary deriving/instance to PTerm |
test/Test/Codec/CBOR/Cuddle/CDDL/GeneratorSpec.hs |
Added positive generator tests, updated expectZapInvalidates to use zapAntiGenResult for better diagnostics, disabled optionalMapExample test with xdescribe |
test/Test/Codec/CBOR/Cuddle/CDDL/Validator.hs |
Extracted genAndValidateRule and genAndValidateCddl as reusable helpers, refactored genAndValidateFromFile to use them |
test/Test/Codec/CBOR/Cuddle/CDDL/Examples/Huddle.hs |
Changed optionalMapExample key range from 0..10 to 1..10 |
cuddle.cabal |
Updated antigen to ^>=0.4, added generic-random dependency |
stack.yaml |
Updated antigen hash for version 0.4.0.0 |
flake.lock |
Updated hackage.nix lock |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
b3de922 to
06ef588
Compare
Extract genAndValidateRule and genAndValidateCddl from genAndValidateFromFile to enable reuse for testing Huddle schemas. Add "Generated value validates" tests that verify generated CBOR values pass validation. This exposes a bug in optionalMapExample where the generator cannot reliably produce 10 unique keys from a 10-element range (1..10), causing most generated maps to have fewer than the required 10 entries. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
The generator cannot reliably produce unique keys for maps where the key range size equals the required entry count. This will be addressed in a separate PR. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Generator: PTUInt and PTNInt now have decision points that generate out-of-bounds values when zapped (wrong sign or exceeding 64-bit range) - Validator: PTUInt now checks 0 <= i <= 2^64-1 (was just i >= 0) - Validator: PTNInt now checks -2^64 <= i <= -1 (was just i <= 0) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
genFaultyHalf generates invalid half-precision values: - NaN, +Inf, -Inf (special values) - Values outside half range (±65504) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
NaN and Infinity are valid per CBOR/CDDL spec (IEEE 754), so they should be generated in the normal case. The faulty generator now only produces values outside the half-precision range (±65504). Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Out-of-range float values become Infinity when encoded as float16, and Infinity is valid per IEEE 754/CBOR spec. The decision point was not producing actually invalid values. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
06ef588 to
c79f237
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This PR adds AntiGen decision points to prelude term generators, so that when zapped, the type of the will change to something completely different.
Because of #155, this will sometimes produce valid values after zapping, since the zapped term might get overwritten by
nubOrdBy. This was actually an issue before, but there were no tests to actually catch that.related #150