macro_rules! qc_open_string_enum {
($name:ident, $ty:ty, [$($slug:literal),+ $(,)?]) => {
pub(crate) fn $name(g: &mut ::quickcheck::Gen) -> $ty {
const SAMPLES: &[&str] = &[$($slug),+];
let s = if super::coin(g) {
::std::string::String::from(*g.choose(SAMPLES).unwrap())
} else {
super::arb_string(g)
};
<$ty as ::core::str::FromStr>::from_str(&s).unwrap()
}
};
}
qc_open_string_enum!(
video_codec,
crate::codec::VideoCodec,
["h264", "hevc", "av1", "vp9", "mpeg4", "prores"]
);
qc_open_string_enum!(
audio_codec,
crate::codec::AudioCodec,
["aac", "mp3", "opus", "flac", "ac3", "alac"]
);
qc_open_string_enum!(
subtitle_codec,
crate::codec::SubtitleCodec,
["srt", "ass", "ssa", "webvtt", "mov_text", "dvb_subtitle"]
);
qc_open_string_enum!(
container_format,
crate::container::Format,
["mp4", "mkv", "webm", "mov", "avi", "mpegts"]
);
qc_open_string_enum!(
subtitle_format,
crate::subtitle::Format,
["srt", "webvtt", "ass", "ssa", "mov_text", "ttml"]
);
qc_open_string_enum!(
channel_layout,
crate::audio::ChannelLayout,
["mono", "stereo", "5.1", "7.1", "quad", "5.0"]
);
pub(crate) fn sample_format(g: &mut ::quickcheck::Gen) -> crate::audio::SampleFormat {
use ::core::str::FromStr;
use ::quickcheck::Arbitrary;
const SLUGS: &[&str] = &[
"u8", "s16", "s32", "flt", "dbl", "u8p", "s16p", "s32p", "fltp", "dblp", "s64", "s64p",
];
match *g.choose(&[0u8, 1, 2]).expect("non-empty arm-tag slice") {
0 => crate::audio::SampleFormat::from_str(g.choose(SLUGS).expect("non-empty SLUGS")).unwrap(),
1 => crate::audio::SampleFormat::from_u32(u32::arbitrary(g)),
_ => crate::audio::SampleFormat::from_str(&super::arb_string(g)).unwrap(),
}
}
qc_open_string_enum!(
audio_container_format,
crate::audio::ContainerFormat,
["mp3", "aac", "flac", "wav", "m4a", "opus"]
);