#![allow(dead_code)]
pub fn xorshift_bytes(seed: u32, n: usize) -> Vec<u8> {
let mut x = seed;
(0..n)
.map(|_| {
x ^= x << 13;
x ^= x >> 17;
x ^= x << 5;
(x & 0xff) as u8
})
.collect()
}
pub const TEXT: &[u8] = b"the quick brown fox jumps over the lazy dog. ";
pub fn repeated(src: &[u8], len: usize) -> Vec<u8> {
let mut v = Vec::with_capacity(len);
while v.len() < len {
let take = (len - v.len()).min(src.len());
v.extend_from_slice(&src[..take]);
}
v
}
pub fn golden_corpus() -> Vec<(&'static str, Vec<u8>)> {
let mut xs: Vec<(&'static str, Vec<u8>)> = Vec::new();
xs.push(("empty", Vec::new()));
xs.push(("one-byte", vec![0x5a]));
xs.push(("three-same", vec![7, 7, 7])); xs.push(("zeros-258", vec![0u8; 258])); xs.push(("zeros-4096", vec![0u8; 4096])); xs.push(("zeros-19584", vec![0u8; 19584])); xs.push(("ff-65536", vec![0xffu8; 65536])); xs.push((
"ramp-4096",
(0..4096u32).map(|i| (i & 0xff) as u8).collect(),
)); xs.push(("text-8192", repeated(TEXT, 8192))); xs.push((
"mixed-4096",
(0..4096u32)
.map(|i| match (i / 96) % 3 {
0 => 0u8,
1 => TEXT[(i as usize) % TEXT.len()],
_ => i.wrapping_mul(7) as u8,
})
.collect(),
)); xs.push(("cd-subcode-2448", repeated(TEXT, 2448))); xs.push(("rand-4096", xorshift_bytes(0x1234_5678, 4096))); xs.push(("rand-20000", xorshift_bytes(0x9E37_79B9, 20000))); xs.push(("skewed-geom-40000", {
let mut x: u32 = 0x9E37_79B9;
(0..40000)
.map(|_| {
x ^= x << 13;
x ^= x >> 17;
x ^= x << 5;
x.trailing_ones().min(255) as u8
})
.collect()
}));
xs
}