Skip to content

Commit 386a2ec

Browse files
committed
Add Arbitrary dependency to units
Implement Arbitrary for a select subset of unit types.
1 parent e8d3e5d commit 386a2ec

6 files changed

Lines changed: 39 additions & 2 deletions

File tree

Cargo-minimal.lock

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,12 @@ version = "1.0.57"
88
source = "registry+https://github.com/rust-lang/crates.io-index"
99
checksum = "08f9b8508dccb7687a1d6c4ce66b2b0ecef467c94667de27d8d7fe1f8d2a9cdc"
1010

11+
[[package]]
12+
name = "arbitrary"
13+
version = "1.1.0"
14+
source = "registry+https://github.com/rust-lang/crates.io-index"
15+
checksum = "c38b6b6b79f671c25e1a3e785b7b82d7562ffc9cd3efdc98627e5668a2472490"
16+
1117
[[package]]
1218
name = "arrayvec"
1319
version = "0.7.4"
@@ -49,6 +55,7 @@ dependencies = [
4955
name = "bitcoin"
5056
version = "0.31.0"
5157
dependencies = [
58+
"arbitrary",
5259
"base58ck",
5360
"base64",
5461
"bech32",
@@ -94,6 +101,7 @@ version = "0.1.2"
94101
name = "bitcoin-units"
95102
version = "0.1.2"
96103
dependencies = [
104+
"arbitrary",
97105
"bitcoin-internals",
98106
"serde",
99107
"serde_json",

Cargo-recent.lock

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,12 @@ version = "1.0.71"
88
source = "registry+https://github.com/rust-lang/crates.io-index"
99
checksum = "9c7d0618f0e0b7e8ff11427422b64564d5fb0be1940354bfe2e0529b18a9d9b8"
1010

11+
[[package]]
12+
name = "arbitrary"
13+
version = "1.1.0"
14+
source = "registry+https://github.com/rust-lang/crates.io-index"
15+
checksum = "c38b6b6b79f671c25e1a3e785b7b82d7562ffc9cd3efdc98627e5668a2472490"
16+
1117
[[package]]
1218
name = "arrayvec"
1319
version = "0.7.4"
@@ -48,6 +54,7 @@ dependencies = [
4854
name = "bitcoin"
4955
version = "0.31.0"
5056
dependencies = [
57+
"arbitrary",
5158
"base58ck",
5259
"base64",
5360
"bech32",
@@ -93,6 +100,7 @@ version = "0.1.2"
93100
name = "bitcoin-units"
94101
version = "0.1.2"
95102
dependencies = [
103+
"arbitrary",
96104
"bitcoin-internals",
97105
"serde",
98106
"serde_json",

units/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ rustdoc-args = ["--cfg", "docsrs"]
2424
[dependencies]
2525
internals = { package = "bitcoin-internals", version = "0.3.0" }
2626

27+
arbitrary = { version = "1", optional =true }
2728
serde = { version = "1.0.103", default-features = false, features = ["derive"], optional = true }
2829

2930
[dev-dependencies]

units/contrib/test_vars.sh

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
#!/usr/bin/env bash
22

33
# Test all these features with "std" enabled.
4-
FEATURES_WITH_STD="serde"
4+
FEATURES_WITH_STD="serde arbitrary"
55

66
# Test all these features without "std" enabled.
7-
FEATURES_WITHOUT_STD="alloc serde"
7+
FEATURES_WITHOUT_STD="alloc serde arbitrary"
88

99
# Run and lint these examples.
1010
EXAMPLES=""

units/src/amount.rs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@ use core::{default, fmt, ops};
1515

1616
#[cfg(feature = "serde")]
1717
use ::serde::{Deserialize, Serialize};
18+
#[cfg(feature = "arbitrary")]
19+
use arbitrary::{Arbitrary, Unstructured};
1820
use internals::error::InputString;
1921
use internals::write_err;
2022

@@ -1876,6 +1878,14 @@ pub mod serde {
18761878
}
18771879
}
18781880

1881+
#[cfg(feature = "arbitrary")]
1882+
impl<'a> Arbitrary<'a> for Amount {
1883+
fn arbitrary(u: &mut Unstructured<'a>) -> arbitrary::Result<Self> {
1884+
let a = u64::arbitrary(u)?;
1885+
Ok(Amount(a))
1886+
}
1887+
}
1888+
18791889
#[cfg(kani)]
18801890
mod verification {
18811891
use std::cmp;

units/src/fee_rate.rs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
use core::fmt;
66
use core::ops::{Div, Mul};
77

8+
#[cfg(feature = "arbitrary")]
9+
use arbitrary::{Arbitrary, Unstructured};
810
#[cfg(feature = "serde")]
911
use serde::{Deserialize, Serialize};
1012

@@ -145,6 +147,14 @@ impl Div<Weight> for Amount {
145147

146148
crate::impl_parse_str_from_int_infallible!(FeeRate, u64, from_sat_per_kwu);
147149

150+
#[cfg(feature = "arbitrary")]
151+
impl<'a> Arbitrary<'a> for FeeRate {
152+
fn arbitrary(u: &mut Unstructured<'a>) -> arbitrary::Result<Self> {
153+
let f = u64::arbitrary(u)?;
154+
Ok(FeeRate(f))
155+
}
156+
}
157+
148158
#[cfg(test)]
149159
mod tests {
150160
use super::*;

0 commit comments

Comments
 (0)