| Crates.io | proptest-arbitrary-adapter |
| lib.rs | proptest-arbitrary-adapter |
| version | 0.1.0 |
| created_at | 2026-01-21 11:31:29.329456+00 |
| updated_at | 2026-01-21 11:31:29.329456+00 |
| description | Make `arbitrary` interoperate with `proptest`. |
| homepage | |
| repository | https://github.com/Neptune-Crypto/proptest-arbitrary-adapter |
| max_upload_size | |
| id | 2058939 |
| size | 34,051 |
Provides the necessary glue to reuse an implementation of arbitrary::Arbitrary as a
proptest::strategy::Strategy.
Assuming you use test-strategy (which you should), using a strategy for a
type that implements arbitrary::Arbitrary is as simple as:
#[proptest]
fn my_test(#[strategy(arb())] my_type: MyType) {
// …
}
This code is a copy of the unmaintained crate proptest-arbitrary-interop, with some additional improvements
from open pull requests of the original's repository.
It only works with types that implement arbitrary::Arbitrary in a particular fashion: those conforming to the
requirements of ArbInterop. These are roughly "types that, when randomly-generated, don't retain pointers into the
random-data buffer wrapped by the arbitrary::Unstructured they are generated from". Many implementations of
arbitrary::Arbitrary will fit the bill, but certain kinds of "zero-copy" implementations of arbitrary::Arbitrary
will not work. This requirement appears to be a necessary part of the semantic model of proptest – generated values
have to own their pointer graph, no borrows. Patches welcome if you can figure out a way to not require it.