use super::super::{PNG_SIZES, rgba, svg};
fn checked() -> Vec<(u16, &'static [u8])> {
vec![
(16, include_bytes!("../../../../assets/yog-16.png")),
(32, include_bytes!("../../../../assets/yog-32.png")),
(48, include_bytes!("../../../../assets/yog-48.png")),
(64, include_bytes!("../../../../assets/yog-64.png")),
(128, include_bytes!("../../../../assets/yog-128.png")),
(256, include_bytes!("../../../../assets/yog-256.png")),
]
}
#[test]
fn the_checked_in_svg_is_the_generated_one() {
assert_eq!(svg(), include_str!("../../../../assets/yog.svg"));
}
const TOLERANCE: u8 = 1;
#[test]
fn every_checked_in_png_decodes_to_the_pixels_the_generator_makes() {
for (size, file) in checked() {
let decoded = image::load_from_memory_with_format(file, image::ImageFormat::Png)
.unwrap_or_else(|error| panic!("yog-{size}.png will not decode: {error}"))
.to_rgba8();
assert_eq!(
(decoded.width(), decoded.height()),
(u32::from(size), u32::from(size)),
"yog-{size}.png is the wrong size"
);
let made = rgba(size);
let file = decoded.into_raw();
assert_eq!(
file.len(),
made.len(),
"assets/yog-{size}.png has drifted from the mark"
);
let drifted: Vec<usize> = (0..file.len())
.filter(|&i| file[i].abs_diff(made[i]) > TOLERANCE)
.collect();
assert!(
drifted.is_empty(),
"assets/yog-{size}.png has drifted from the mark at {} of {} channels, first at {:?}",
drifted.len(),
file.len(),
drifted.first()
);
}
}
#[test]
fn the_checked_in_set_is_the_declared_set() {
let sizes: Vec<u16> = checked().into_iter().map(|(size, _)| size).collect();
assert_eq!(sizes, PNG_SIZES.to_vec());
}