use crate::BoxGen;
use crate::FilterWithGen;
use crate::MapWithGen;
pub fn unicode() -> BoxGen<char> {
crate::gens::u32::ranged(0..=0x10ffff)
.filter(|&num| !(0xD800..=0xDFFF).contains(&num))
.map(|num| char::from_u32(num).unwrap(), |ch| ch as u32)
}
pub fn any() -> BoxGen<char> {
unicode()
}
fn chars_from_u32_range(min: u32, max_inclusive: u32) -> BoxGen<char> {
crate::gens::u32::ranged(min..=max_inclusive)
.map(|num| char::from_u32(num).unwrap(), |ch| ch as u32)
}
pub fn number() -> BoxGen<char> {
chars_from_u32_range(48, 57)
}
pub fn alpha_upper() -> BoxGen<char> {
chars_from_u32_range(65, 90)
}
pub fn alpha_lower() -> BoxGen<char> {
chars_from_u32_range(97, 122)
}
pub fn alpha() -> BoxGen<char> {
crate::gens::mix_evenly(&[alpha_upper(), alpha_lower()])
}
pub fn alpha_numeric() -> BoxGen<char> {
crate::gens::mix_with_ratio(&[(9, alpha()), (1, number())])
}
pub fn ascii_printable() -> BoxGen<char> {
chars_from_u32_range(32, 126)
}
pub fn ascii() -> BoxGen<char> {
chars_from_u32_range(0, 127)
}