use proptest::{bool, char};
use proptest::num::{isize, usize, f32, f64, i16, i32, i64, i8, u16, u32, u64, u8};
impls! {
bool, f32, f64,
i8, i16, i32, i64, isize,
u8, u16, u32, u64, usize
}
use std::borrow::Cow;
type CharRange = (char, char);
type CowSlices<'a, T> = Cow<'a, [T]>;
const WHOLE_RANGE: &[CharRange] = &[('\x00', ::std::char::MAX)];
impl<'a> Default for CharParameters<'a> {
fn default() -> Self {
Self {
special: Cow::Borrowed(char::DEFAULT_SPECIAL_CHARS),
preferred: Cow::Borrowed(char::DEFAULT_PREFERRED_RANGES),
ranges: Cow::Borrowed(WHOLE_RANGE),
}
}
}
#[derive(Clone, PartialEq, Eq, Hash, Debug, From, Into)]
#[cfg_attr(feature = "frunk", derive(Generic))]
pub struct CharParameters<'a> {
special: CowSlices<'a, char>,
preferred: CowSlices<'a, CharRange>,
ranges: CowSlices<'a, CharRange>,
}
arbitrary_for!([] char, char::CharStrategy<'a>, CharParameters<'a>, args => {
char::CharStrategy::new(args.special, args.preferred, args.ranges)
});