Skip to content

Commit 35caa87

Browse files
authored
Merge branch 'master' into rm-to-string-as
2 parents 5fc167a + 4a10b72 commit 35caa87

File tree

4 files changed

+156
-11
lines changed

4 files changed

+156
-11
lines changed

Cargo.lock

Lines changed: 108 additions & 9 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,11 @@ arbitrary = ["dep:arbitrary"]
2020
serde = ["dep:serde"]
2121

2222
[dependencies]
23-
arbitrary = { version = "1", features = ["derive"], optional = true }
23+
arbitrary = { version = "1", optional = true }
2424
serde = { version = "1", optional = true }
2525

2626
[dev-dependencies]
27+
quickcheck = "1"
2728
serde = { version = "1", features = ["derive"] }
2829
serde_json = "1"
2930
toml = "0.8"

src/arbitrary.rs

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
use arbitrary::{Arbitrary, Unstructured};
2+
3+
use crate::ByteSize;
4+
5+
impl Arbitrary<'_> for ByteSize {
6+
fn arbitrary(u: &mut Unstructured<'_>) -> arbitrary::Result<Self> {
7+
Ok(ByteSize(u64::arbitrary(u)?))
8+
}
9+
10+
fn size_hint(depth: usize) -> (usize, Option<usize>) {
11+
u64::size_hint(depth)
12+
}
13+
}

src/lib.rs

Lines changed: 33 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,8 @@
3939
//! assert_eq!(ByteSize::gb(996), minus);
4040
//! ```
4141
42+
#[cfg(feature = "arbitrary")]
43+
mod arbitrary;
4244
mod parse;
4345
#[cfg(feature = "serde")]
4446
mod serde;
@@ -135,7 +137,6 @@ pub fn pib<V: Into<u64>>(size: V) -> u64 {
135137

136138
/// Byte size representation
137139
#[derive(Copy, Clone, PartialEq, PartialOrd, Eq, Ord, Hash, Default)]
138-
#[cfg_attr(feature = "arbitrary", derive(arbitrary::Arbitrary))]
139140
pub struct ByteSize(pub u64);
140141

141142
impl ByteSize {
@@ -369,6 +370,37 @@ where
369370
}
370371
}
371372

373+
#[cfg(test)]
374+
mod property_tests {
375+
use super::*;
376+
377+
impl quickcheck::Arbitrary for ByteSize {
378+
fn arbitrary(g: &mut quickcheck::Gen) -> Self {
379+
Self(u64::arbitrary(g))
380+
}
381+
}
382+
383+
quickcheck::quickcheck! {
384+
fn parsing_never_panics(size: String) -> bool {
385+
let _ = size.parse::<ByteSize>();
386+
true
387+
}
388+
389+
fn to_string_never_blank(size: ByteSize) -> bool {
390+
!size.to_string().is_empty()
391+
}
392+
393+
fn to_string_never_large(size: ByteSize) -> bool {
394+
size.to_string().len() < 11
395+
}
396+
397+
// // currently fails on input like "14.0 EiB"
398+
// fn string_round_trip(size: ByteSize) -> bool {
399+
// size.to_string().parse::<ByteSize>().unwrap() == size
400+
// }
401+
}
402+
}
403+
372404
#[cfg(test)]
373405
mod tests {
374406
use super::*;

0 commit comments

Comments
 (0)