Skip to content

Commit 4667477

Browse files
committed
Document UniformUsize fields
1 parent af75502 commit 4667477

1 file changed

Lines changed: 57 additions & 0 deletions

File tree

src/distr/uniform_int.rs

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -413,9 +413,13 @@ uniform_simd_int_impl! { (u8, i8), (u16, i16), (u32, i32), (u64, i64) }
413413
derive(Deserialize)
414414
)]
415415
pub struct UniformUsize {
416+
/// The lowest possible value.
416417
low: usize,
418+
/// The number of possible values. `0` has a special meaning: all.
417419
range: usize,
420+
/// Threshold used when sampling to obtain a uniform distribution.
418421
thresh: usize,
422+
/// Whether the largest possible value is greater than `u32::MAX`.
419423
#[cfg(target_pointer_width = "64")]
420424
// Handle missing field when deserializing on 64-bit an object serialized
421425
// on 32-bit. Can be removed when switching to a custom deserializer.
@@ -806,4 +810,57 @@ mod tests {
806810
);
807811
}
808812
}
813+
814+
#[test]
815+
fn test_uniform_usize_empty_range() {
816+
assert_eq!(UniformUsize::new(10, 10), Err(Error::EmptyRange));
817+
assert!(UniformUsize::new(10, 11).is_ok());
818+
819+
assert_eq!(UniformUsize::new_inclusive(10, 9), Err(Error::EmptyRange));
820+
assert!(UniformUsize::new_inclusive(10, 10).is_ok());
821+
}
822+
823+
#[test]
824+
fn test_uniform_usize_constructors() {
825+
assert_eq!(
826+
UniformUsize::new_inclusive(u32::MAX as usize, u32::MAX as usize),
827+
Ok(UniformUsize {
828+
low: u32::MAX as usize,
829+
range: 1,
830+
thresh: 0,
831+
#[cfg(target_pointer_width = "64")]
832+
mode64: false
833+
})
834+
);
835+
assert_eq!(
836+
UniformUsize::new_inclusive(0, u32::MAX as usize),
837+
Ok(UniformUsize {
838+
low: 0,
839+
range: 0,
840+
thresh: 0,
841+
#[cfg(target_pointer_width = "64")]
842+
mode64: false
843+
})
844+
);
845+
#[cfg(target_pointer_width = "64")]
846+
assert_eq!(
847+
UniformUsize::new_inclusive(0, u32::MAX as usize + 1),
848+
Ok(UniformUsize {
849+
low: 0,
850+
range: u32::MAX as usize + 2,
851+
thresh: 1,
852+
mode64: true
853+
})
854+
);
855+
#[cfg(target_pointer_width = "64")]
856+
assert_eq!(
857+
UniformUsize::new_inclusive(u32::MAX as usize, u64::MAX as usize),
858+
Ok(UniformUsize {
859+
low: u32::MAX as usize,
860+
range: u64::MAX as usize - u32::MAX as usize + 1,
861+
thresh: u32::MAX as usize,
862+
mode64: true
863+
})
864+
);
865+
}
809866
}

0 commit comments

Comments
 (0)