Fix next_u32_via_fill and next_u64_via_fill to use LE conversion as documented
This commit is contained in:
parent
a61efd90be
commit
de579bede6
@ -136,14 +136,14 @@ pub fn fill_via_u64_chunks(src: &[u64], dest: &mut [u8]) -> (usize, usize) {
|
||||
pub fn next_u32_via_fill<R: RngCore + ?Sized>(rng: &mut R) -> u32 {
|
||||
let mut buf = [0; 4];
|
||||
rng.fill_bytes(&mut buf);
|
||||
u32::from_ne_bytes(buf)
|
||||
u32::from_le_bytes(buf)
|
||||
}
|
||||
|
||||
/// Implement `next_u64` via `fill_bytes`, little-endian order.
|
||||
pub fn next_u64_via_fill<R: RngCore + ?Sized>(rng: &mut R) -> u64 {
|
||||
let mut buf = [0; 8];
|
||||
rng.fill_bytes(&mut buf);
|
||||
u64::from_ne_bytes(buf)
|
||||
u64::from_le_bytes(buf)
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
|
@ -113,23 +113,23 @@ mod test {
|
||||
// transmute from the target to avoid endianness concerns.
|
||||
#[rustfmt::skip]
|
||||
let v = [0u8, 0, 0, 0, 0, 0, 0, 1,
|
||||
0, 0, 0, 0, 0, 0, 0, 2,
|
||||
0, 0, 0, 0, 0, 0, 0, 3];
|
||||
0, 4, 0, 0, 3, 0, 0, 2,
|
||||
5, 0, 0, 0, 0, 0, 0, 0];
|
||||
let mut rng = ReadRng::new(&v[..]);
|
||||
|
||||
assert_eq!(rng.next_u64(), 1_u64.to_be());
|
||||
assert_eq!(rng.next_u64(), 2_u64.to_be());
|
||||
assert_eq!(rng.next_u64(), 3_u64.to_be());
|
||||
assert_eq!(rng.next_u64(), 1 << 56);
|
||||
assert_eq!(rng.next_u64(), (2 << 56) + (3 << 32) + (4 << 8));
|
||||
assert_eq!(rng.next_u64(), 5);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_reader_rng_u32() {
|
||||
let v = [0u8, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 3];
|
||||
let v = [0u8, 0, 0, 1, 0, 0, 2, 0, 3, 0, 0, 0];
|
||||
let mut rng = ReadRng::new(&v[..]);
|
||||
|
||||
assert_eq!(rng.next_u32(), 1_u32.to_be());
|
||||
assert_eq!(rng.next_u32(), 2_u32.to_be());
|
||||
assert_eq!(rng.next_u32(), 3_u32.to_be());
|
||||
assert_eq!(rng.next_u32(), 1 << 24);
|
||||
assert_eq!(rng.next_u32(), 2 << 16);
|
||||
assert_eq!(rng.next_u32(), 3);
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
Loading…
x
Reference in New Issue
Block a user