Add api test to check Arbitrary impls

This commit is contained in:
Shing Him Ng 2024-12-19 15:38:03 -06:00
parent 678fc71b88
commit 04dfe8dd45
1 changed files with 41 additions and 0 deletions

View File

@ -25,6 +25,8 @@ use bitcoin_units::{
amount, block, fee_rate, locktime, parse, weight, Amount, BlockHeight, BlockInterval, FeeRate,
SignedAmount, Weight,
};
#[cfg(feature = "arbitrary")]
use arbitrary::{Arbitrary, Unstructured};
/// A struct that includes all public non-error enums.
#[derive(Debug)] // All public types implement Debug (C-DEBUG).
@ -263,3 +265,42 @@ fn regression_default() {
};
assert_eq!(got, want);
}
#[cfg(feature = "arbitrary")]
impl<'a> Arbitrary<'a> for Types {
fn arbitrary(u: &mut Unstructured<'a>) -> arbitrary::Result<Self> {
let a = Types { a: Enums::arbitrary(u)?, b: Structs::arbitrary(u)? };
Ok(a)
}
}
#[cfg(feature = "arbitrary")]
impl<'a> Arbitrary<'a> for Structs {
fn arbitrary(u: &mut Unstructured<'a>) -> arbitrary::Result<Self> {
let a = Structs {
a: Amount::arbitrary(u)?,
// Skip the `Display` type.
b: Amount::MAX.display_in(amount::Denomination::Bitcoin),
c: SignedAmount::arbitrary(u)?,
d: BlockHeight::arbitrary(u)?,
e: BlockInterval::arbitrary(u)?,
f: FeeRate::arbitrary(u)?,
g: absolute::Height::arbitrary(u)?,
h: absolute::Time::arbitrary(u)?,
i: relative::Height::arbitrary(u)?,
j: relative::Time::arbitrary(u)?,
k: Weight::arbitrary(u)?,
};
Ok(a)
}
}
#[cfg(feature = "arbitrary")]
impl<'a> Arbitrary<'a> for Enums {
fn arbitrary(u: &mut Unstructured<'a>) -> arbitrary::Result<Self> {
let a = Enums {
a: amount::Denomination::arbitrary(u)?,
};
Ok(a)
}
}