in shed/ascii_ext/src/lib.rs [96:163]
fn arbitrary(g: &mut Gen) -> Self {
let mode = u32::arbitrary(g) % 100;
let ret = match mode {
0..=14 => {
// Control characters
unsafe { ascii::AsciiChar::from_ascii_unchecked(gen_ascii_in_range(g, 0u8, 0x1F)) }
}
15..=39 => {
// Characters often used in programming languages
use ascii::AsciiChar;
*g.choose(&[
AsciiChar::Space,
AsciiChar::Tab,
AsciiChar::LineFeed,
AsciiChar::Tilde,
AsciiChar::Grave,
AsciiChar::Exclamation,
AsciiChar::At,
AsciiChar::Hash,
AsciiChar::Dollar,
AsciiChar::Percent,
AsciiChar::Ampersand,
AsciiChar::Asterisk,
AsciiChar::ParenOpen,
AsciiChar::ParenClose,
AsciiChar::UnderScore,
AsciiChar::Minus,
AsciiChar::Equal,
AsciiChar::Plus,
AsciiChar::BracketOpen,
AsciiChar::BracketClose,
AsciiChar::CurlyBraceOpen,
AsciiChar::CurlyBraceClose,
AsciiChar::Colon,
AsciiChar::Semicolon,
AsciiChar::Apostrophe,
AsciiChar::Quotation,
AsciiChar::BackSlash,
AsciiChar::VerticalBar,
AsciiChar::Caret,
AsciiChar::Comma,
AsciiChar::LessThan,
AsciiChar::GreaterThan,
AsciiChar::Dot,
AsciiChar::Slash,
AsciiChar::Question,
AsciiChar::_0,
AsciiChar::_1,
AsciiChar::_2,
AsciiChar::_3,
AsciiChar::_3,
AsciiChar::_4,
AsciiChar::_6,
AsciiChar::_7,
AsciiChar::_8,
AsciiChar::_9,
])
.unwrap()
}
40..=99 => {
// Completely arbitrary characters
unsafe { ascii::AsciiChar::from_ascii_unchecked(gen_ascii_in_range(g, 0u8, 0x80)) }
}
_ => unreachable!(),
};
AsciiChar(ret)
}