@@ -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()),
}
}
}