Use a uniform distribution for generating random characters
This commit is contained in:
committed by
Max Brunsfeld
parent
169a298af1
commit
d6eb6d33b6
+11
-22
@@ -66,28 +66,17 @@ impl<T: Rng> Iterator for RandomCharIter<T> {
|
||||
type Item = char;
|
||||
|
||||
fn next(&mut self) -> Option<Self::Item> {
|
||||
if self.0.gen_bool(1.0 / 5.0) {
|
||||
match self.0.gen_range(0..=2) {
|
||||
0 => Some('\t'),
|
||||
1 => Some(' '),
|
||||
_ => Some('\n'),
|
||||
}
|
||||
}
|
||||
// two-byte greek letters
|
||||
else if self.0.gen_bool(1.0 / 8.0) {
|
||||
Some(std::char::from_u32(self.0.gen_range(('α' as u32)..('ω' as u32 + 1))).unwrap())
|
||||
}
|
||||
// three-byte characters
|
||||
else if self.0.gen_bool(1.0 / 10.0) {
|
||||
['✋', '✅', '❌', '❎', '⭐'].choose(&mut self.0).cloned()
|
||||
}
|
||||
// four-byte characters
|
||||
else if self.0.gen_bool(1.0 / 12.0) {
|
||||
['🍐', '🏀', '🍗', '🎉'].choose(&mut self.0).cloned()
|
||||
}
|
||||
// ascii letters
|
||||
else {
|
||||
Some(self.0.gen_range(b'a'..b'z' + 1).into())
|
||||
match self.0.gen_range(0..100) {
|
||||
// whitespace
|
||||
0..=19 => [' ', '\n', '\t'].choose(&mut self.0).copied(),
|
||||
// two-byte greek letters
|
||||
20..=32 => char::from_u32(self.0.gen_range(('α' as u32)..('ω' as u32 + 1))),
|
||||
// three-byte characters
|
||||
33..=45 => ['✋', '✅', '❌', '❎', '⭐'].choose(&mut self.0).copied(),
|
||||
// four-byte characters
|
||||
46..=58 => ['🍐', '🏀', '🍗', '🎉'].choose(&mut self.0).copied(),
|
||||
// ascii letters
|
||||
_ => Some(self.0.gen_range(b'a'..b'z' + 1).into()),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user