From 78d3a27f3b57c3f82a14a164183f048d56c8b0dd Mon Sep 17 00:00:00 2001 From: "Kevin M. Gill" Date: Sun, 9 Apr 2023 10:14:54 -0700 Subject: [PATCH] Clippy suggestions. Fixed non-op in inpaint::find_starting_point, added test --- src/inpaint.rs | 40 ++++++++---------- src/util.rs | 2 +- tests/inpaint.rs | 17 ++++++++ .../testdata/MSL_MAHLI_INPAINT_Sol2904_V1.png | Bin 0 -> 14440 bytes 4 files changed, 36 insertions(+), 23 deletions(-) create mode 100644 tests/inpaint.rs create mode 100644 tests/testdata/MSL_MAHLI_INPAINT_Sol2904_V1.png diff --git a/src/inpaint.rs b/src/inpaint.rs index a96c39b..4f65aca 100644 --- a/src/inpaint.rs +++ b/src/inpaint.rs @@ -2,14 +2,16 @@ use crate::{enums, error, image::Image, imagebuffer::ImageBuffer, stats}; +use itertools::iproduct; + #[cfg(rayon)] use rayon::prelude::*; #[derive(Debug, Clone)] -struct Point { - x: usize, - y: usize, - score: u32, +pub struct Point { + pub x: usize, + pub y: usize, + pub score: u32, } struct RgbVec { @@ -78,30 +80,24 @@ fn get_num_good_neighbors(mask: &ImageBuffer, x: i32, y: i32) -> u32 { } #[cfg(rayon)] -fn find_starting_point(mask: &ImageBuffer) -> Option { +pub fn find_starting_point(mask: &ImageBuffer) -> Option { let height_iter = (0..mask.height.clone()).into_par_iter(); - height_iter.for_each(|y| { - (0..mask.width).for_each(|x| { - if mask.get(x, y) > 0.0 { - Some(Point { x, y, score: 0 }); - } else { - } - }); - }); + for (y, x) in iproduct!(height_iter, (0..mask.width)) { + if mask.get(x, y) > 0.0 { + return Some(Point { x, y, score: 0 }); + } + } None } #[cfg(not(rayon))] -fn find_starting_point(mask: &ImageBuffer) -> Option { - (0..mask.height).for_each(|y| { - (0..mask.width).for_each(|x| { - if mask.get(x, y) > 0.0 { - Some(Point { x, y, score: 0 }); - } else { - } - }); - }); +pub fn find_starting_point(mask: &ImageBuffer) -> Option { + for (y, x) in iproduct!((0..mask.height), (0..mask.width)) { + if mask.get(x, y) > 0.0 { + return Some(Point { x, y, score: 0 }); + } + } None } diff --git a/src/util.rs b/src/util.rs index 98ed246..084177b 100644 --- a/src/util.rs +++ b/src/util.rs @@ -86,7 +86,7 @@ pub fn replace_image_extension(input_file: &str, append: &str) -> String { pub fn vec_to_str(v: &[f64]) -> String { let mut b = Builder::default(); - v.into_iter().for_each(|item| { + v.iter().for_each(|item| { b.append(format!("{},", item)); }); diff --git a/tests/inpaint.rs b/tests/inpaint.rs new file mode 100644 index 0000000..459991d --- /dev/null +++ b/tests/inpaint.rs @@ -0,0 +1,17 @@ +use sciimg::{imagebuffer::ImageBuffer, inpaint}; + +const INPAINT_TEST_IMAGE: &str = "tests/testdata/MSL_MAHLI_INPAINT_Sol2904_V1.png"; + +#[test] +fn test_find_starting_point() { + let inpaint_mask = ImageBuffer::from_file(&String::from(INPAINT_TEST_IMAGE)).unwrap(); + + let start_point = inpaint::find_starting_point(&inpaint_mask); + + assert!(start_point.is_some()); + + let start = start_point.unwrap(); + assert_eq!(1581, start.x); + assert_eq!(15, start.y); + assert_eq!(0, start.score); +} diff --git a/tests/testdata/MSL_MAHLI_INPAINT_Sol2904_V1.png b/tests/testdata/MSL_MAHLI_INPAINT_Sol2904_V1.png new file mode 100644 index 0000000000000000000000000000000000000000..fb9ef940625cd8033b43db7c335d2e01d7b428f7 GIT binary patch literal 14440 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