asm: re-allow prop-testing with cargo test
#10185
Merged
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.
In #10110, I originally intended to use
arbitrary
implementations in two ways: for long-running fuzz testing (e.g., with OSS-Fuzz) but also for quick property testing withcargo test
. This latter use case could replace the tedious emit tests we had to write incranelift-codegen
and find corner cases that we otherwise might not explore. It helped me during development: just runcargo test
to check if anything is obviously wrong.arbtest
seemed to be able to run ~1000 test cases and found mistakes well within the one second time limit I gave it.@alexcrichton improved #10110 by avoiding
Arbitrary
implementations everywhere and unconditionally depending on thearbitrary
crate. This was the right change, but it removed the ability to property test usingcargo test
. What this change does is retain the general intent of his change (no extra dependencies) but addArbitrary
implementations forcfg(test)
as well to run property tests duringcargo test
.The only downside I see here is the added complexity when conditionally compiling the fuzz-related bits:
#[cfg(any(test, feature = "fuzz"))]
. Perhaps there is a better way to do this, but this seemed to work fine. Let me know what you think.