Skip to content

Commit 0c955c5

Browse files
authored
Add some tests for BlockRng, BlockRng64 and Xoshiro RNGs (#1639)
1 parent 204084a commit 0c955c5

File tree

3 files changed

+37
-2
lines changed

3 files changed

+37
-2
lines changed

rand_core/src/block.rs

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -531,4 +531,33 @@ mod test {
531531
c[12..].copy_from_slice(&rng3.next_u32().to_le_bytes());
532532
assert_eq!(b, c);
533533
}
534+
535+
#[test]
536+
fn blockrng64_generate_and_set() {
537+
let mut rng = BlockRng64::<DummyRng64>::from_seed([1, 2, 3, 4, 5, 6, 7, 8]);
538+
assert_eq!(rng.index(), rng.results.as_ref().len());
539+
540+
rng.generate_and_set(5);
541+
assert_eq!(rng.index(), 5);
542+
}
543+
544+
#[test]
545+
#[should_panic(expected = "index < self.results.as_ref().len()")]
546+
fn blockrng64_generate_and_set_panic() {
547+
let mut rng = BlockRng64::<DummyRng64>::from_seed([1, 2, 3, 4, 5, 6, 7, 8]);
548+
rng.generate_and_set(rng.results.as_ref().len());
549+
}
550+
551+
#[test]
552+
fn blockrng_next_u64() {
553+
let mut rng = BlockRng::<DummyRng>::from_seed([1, 2, 3, 4]);
554+
let result_size = rng.results.as_ref().len();
555+
for _i in 0..result_size / 2 - 1 {
556+
rng.next_u64();
557+
}
558+
rng.next_u32();
559+
560+
let result = rng.next_u64();
561+
assert_eq!(rng.index(), 1);
562+
}
534563
}

src/rngs/xoshiro128plusplus.rs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -120,16 +120,19 @@ mod tests {
120120
}
121121

122122
#[test]
123-
fn stable_seed_from_u64() {
123+
fn stable_seed_from_u64_and_from_seed() {
124124
// We don't guarantee value-stability for SmallRng but this
125125
// could influence keeping stability whenever possible (e.g. after optimizations).
126126
let mut rng = Xoshiro128PlusPlus::seed_from_u64(0);
127+
// from_seed([0; 16]) should produce the same state as seed_from_u64(0).
128+
let mut rng_from_seed_0 = Xoshiro128PlusPlus::from_seed([0; 16]);
127129
let expected = [
128130
1179900579, 1938959192, 3089844957, 3657088315, 1015453891, 479942911, 3433842246,
129131
669252886, 3985671746, 2737205563,
130132
];
131133
for &e in &expected {
132134
assert_eq!(rng.next_u32(), e);
135+
assert_eq!(rng_from_seed_0.next_u32(), e);
133136
}
134137
}
135138
}

src/rngs/xoshiro256plusplus.rs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -132,10 +132,12 @@ mod tests {
132132
}
133133

134134
#[test]
135-
fn stable_seed_from_u64() {
135+
fn stable_seed_from_u64_and_from_seed() {
136136
// We don't guarantee value-stability for SmallRng but this
137137
// could influence keeping stability whenever possible (e.g. after optimizations).
138138
let mut rng = Xoshiro256PlusPlus::seed_from_u64(0);
139+
// from_seed([0; 32]) should produce the same state as seed_from_u64(0).
140+
let mut rng_from_seed_0 = Xoshiro256PlusPlus::from_seed([0; 32]);
139141
let expected = [
140142
5987356902031041503,
141143
7051070477665621255,
@@ -150,6 +152,7 @@ mod tests {
150152
];
151153
for &e in &expected {
152154
assert_eq!(rng.next_u64(), e);
155+
assert_eq!(rng_from_seed_0.next_u64(), e);
153156
}
154157
}
155158
}

0 commit comments

Comments
 (0)