use anyhow::Result;
use versatiles_core::TileBBox;
use versatiles_image::{DynamicImage, ImageBuffer};
use crate::TileSource;
#[must_use]
pub fn tiny_rgb_image() -> DynamicImage {
let data = vec![
255, 0, 0, 0, 255, 0, 0, 0, 255, 10, 20, 30, ];
DynamicImage::ImageRgb8(ImageBuffer::from_vec(2, 2, data).expect("vec->img"))
}
pub async fn assert_stream_counts_agree(source: &dyn TileSource, bbox: TileBBox) -> Result<()> {
let coord_count = source.tile_coord_stream(bbox).await?.drain_and_count().await;
let tile_count = source.tile_stream(bbox).await?.to_vec().await.len() as u64;
assert_eq!(
coord_count, tile_count,
"TileSource invariant violated for bbox {bbox:?}: tile_coord_stream yielded {coord_count}, tile_stream yielded {tile_count}",
);
Ok(())
}
#[cfg(test)]
mod tests {
use versatiles_image::GenericImageView;
use super::*;
#[test]
fn tiny_rgb_image_has_expected_dimensions() {
let img = tiny_rgb_image();
assert_eq!(img.dimensions(), (2, 2));
}
#[test]
fn tiny_rgb_image_has_expected_pixels() {
let img = tiny_rgb_image();
let p00 = img.get_pixel(0, 0);
let p10 = img.get_pixel(1, 0);
let p01 = img.get_pixel(0, 1);
let p11 = img.get_pixel(1, 1);
assert_eq!(p00.0[0..3], [255, 0, 0]); assert_eq!(p10.0[0..3], [0, 255, 0]); assert_eq!(p01.0[0..3], [0, 0, 255]); assert_eq!(p11.0[0..3], [10, 20, 30]); }
}