Skip to content

Commit

Permalink
sep tests/benches in filter/mod and template_matching
Browse files Browse the repository at this point in the history
  • Loading branch information
cospectrum committed Apr 28, 2024
1 parent 201d463 commit bf8493f
Show file tree
Hide file tree
Showing 2 changed files with 122 additions and 115 deletions.
193 changes: 96 additions & 97 deletions src/filter/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -562,16 +562,6 @@ mod tests {
use std::cmp::{max, min};
use test::{black_box, Bencher};

#[cfg_attr(miri, ignore)]
#[bench]
fn bench_bilateral_filter(b: &mut Bencher) {
let image = gray_bench_image(500, 500);
b.iter(|| {
let filtered = bilateral_filter(&image, 10, 10., 3.);
black_box(filtered);
});
}

#[test]
fn test_bilateral_filter() {
let image = gray_image!(
Expand Down Expand Up @@ -611,17 +601,6 @@ mod tests {

assert_pixels_eq!(box_filter(&image, 1, 1), expected);
}

#[cfg_attr(miri, ignore)]
#[bench]
fn bench_box_filter(b: &mut Bencher) {
let image = gray_bench_image(500, 500);
b.iter(|| {
let filtered = box_filter(&image, 7, 7);
black_box(filtered);
});
}

#[test]
fn test_separable_filter() {
let image = gray_image!(
Expand Down Expand Up @@ -659,18 +638,6 @@ mod tests {
assert_pixels_eq!(filtered, expected);
}

#[cfg_attr(miri, ignore)]
#[bench]
fn bench_separable_filter(b: &mut Bencher) {
let image = gray_bench_image(300, 300);
let h_kernel = vec![1f32 / 5f32; 5];
let v_kernel = vec![0.1f32, 0.4f32, 0.3f32, 0.1f32, 0.1f32];
b.iter(|| {
let filtered = separable_filter(&image, &h_kernel, &v_kernel);
black_box(filtered);
});
}

/// Reference implementation of horizontal_filter. Used to validate
/// the (presumably faster) actual implementation.
fn horizontal_filter_reference(image: &GrayImage, kernel: &[f32]) -> GrayImage {
Expand Down Expand Up @@ -797,18 +764,6 @@ mod tests {
let kernel = vec![1f32 / 10f32; 10];
black_box(horizontal_filter(&image, &kernel));
}

#[cfg_attr(miri, ignore)]
#[bench]
fn bench_horizontal_filter(b: &mut Bencher) {
let image = gray_bench_image(500, 500);
let kernel = vec![1f32 / 5f32; 5];
b.iter(|| {
let filtered = horizontal_filter(&image, &kernel);
black_box(filtered);
});
}

#[test]
fn test_vertical_filter() {
let image = gray_image!(
Expand Down Expand Up @@ -837,18 +792,6 @@ mod tests {
let kernel = vec![1f32 / 10f32; 10];
black_box(vertical_filter(&image, &kernel));
}

#[cfg_attr(miri, ignore)]
#[bench]
fn bench_vertical_filter(b: &mut Bencher) {
let image = gray_bench_image(500, 500);
let kernel = vec![1f32 / 5f32; 5];
b.iter(|| {
let filtered = vertical_filter(&image, &kernel);
black_box(filtered);
});
}

#[test]
fn test_filter3x3_with_results_outside_input_channel_range() {
#[rustfmt::skip]
Expand Down Expand Up @@ -931,8 +874,103 @@ mod tests {

assert_pixels_eq!(filtered, expected);
}
#[test]
#[should_panic]
fn test_gaussian_blur_f32_rejects_zero_sigma() {
let image = gray_image!(
1, 2, 3;
4, 5, 6;
7, 8, 9
);
let _ = gaussian_blur_f32(&image, 0.0);
}

#[test]
#[should_panic]
fn test_gaussian_blur_f32_rejects_negative_sigma() {
let image = gray_image!(
1, 2, 3;
4, 5, 6;
7, 8, 9
);
let _ = gaussian_blur_f32(&image, -0.5);
}

#[test]
fn test_gaussian_on_u8_white_idempotent() {
let image = ImageBuffer::<Luma<u8>, Vec<u8>>::from_pixel(64, 64, Luma([255]));
let image2 = gaussian_blur_f32(&image, 10f32);
assert_pixels_eq_within!(image2, image, 0);
}

#[test]
fn test_gaussian_on_f32_white_idempotent() {
let image = ImageBuffer::<Luma<f32>, Vec<f32>>::from_pixel(64, 64, Luma([1.0]));
let image2 = gaussian_blur_f32(&image, 10f32);
assert_pixels_eq_within!(image2, image, 1e-6);
}
}

#[cfg(not(miri))]
#[cfg(test)]
mod benches {
use super::*;
use crate::definitions::{Clamp, Image};
use crate::utils::{gray_bench_image, rgb_bench_image};
use image::imageops::blur;
use image::{GenericImage, GrayImage, ImageBuffer, Luma, Rgb};
use std::cmp::{max, min};
use test::{black_box, Bencher};

#[bench]
fn bench_bilateral_filter(b: &mut Bencher) {
let image = gray_bench_image(500, 500);
b.iter(|| {
let filtered = bilateral_filter(&image, 10, 10., 3.);
black_box(filtered);
});
}

#[bench]
fn bench_box_filter(b: &mut Bencher) {
let image = gray_bench_image(500, 500);
b.iter(|| {
let filtered = box_filter(&image, 7, 7);
black_box(filtered);
});
}

#[bench]
fn bench_separable_filter(b: &mut Bencher) {
let image = gray_bench_image(300, 300);
let h_kernel = vec![1f32 / 5f32; 5];
let v_kernel = vec![0.1f32, 0.4f32, 0.3f32, 0.1f32, 0.1f32];
b.iter(|| {
let filtered = separable_filter(&image, &h_kernel, &v_kernel);
black_box(filtered);
});
}

#[bench]
fn bench_horizontal_filter(b: &mut Bencher) {
let image = gray_bench_image(500, 500);
let kernel = vec![1f32 / 5f32; 5];
b.iter(|| {
let filtered = horizontal_filter(&image, &kernel);
black_box(filtered);
});
}

#[bench]
fn bench_vertical_filter(b: &mut Bencher) {
let image = gray_bench_image(500, 500);
let kernel = vec![1f32 / 5f32; 5];
b.iter(|| {
let filtered = vertical_filter(&image, &kernel);
black_box(filtered);
});
}

#[cfg_attr(miri, ignore)]
#[bench]
fn bench_filter3x3_i32_filter(b: &mut Bencher) {
let image = gray_bench_image(500, 500);
Expand Down Expand Up @@ -989,7 +1027,6 @@ mod tests {
});
}

#[cfg_attr(miri, ignore)]
#[bench]
fn bench_gaussian_f32_stdev_1(b: &mut Bencher) {
let image = rgb_bench_image(100, 100);
Expand All @@ -999,7 +1036,6 @@ mod tests {
});
}

#[cfg_attr(miri, ignore)]
#[bench]
fn bench_gaussian_f32_stdev_3(b: &mut Bencher) {
let image = rgb_bench_image(100, 100);
Expand All @@ -1009,7 +1045,6 @@ mod tests {
});
}

#[cfg_attr(miri, ignore)]
#[bench]
fn bench_gaussian_f32_stdev_10(b: &mut Bencher) {
let image = rgb_bench_image(100, 100);
Expand All @@ -1018,40 +1053,4 @@ mod tests {
black_box(blurred);
});
}

#[test]
#[should_panic]
fn test_gaussian_blur_f32_rejects_zero_sigma() {
let image = gray_image!(
1, 2, 3;
4, 5, 6;
7, 8, 9
);
let _ = gaussian_blur_f32(&image, 0.0);
}

#[test]
#[should_panic]
fn test_gaussian_blur_f32_rejects_negative_sigma() {
let image = gray_image!(
1, 2, 3;
4, 5, 6;
7, 8, 9
);
let _ = gaussian_blur_f32(&image, -0.5);
}

#[test]
fn test_gaussian_on_u8_white_idempotent() {
let image = ImageBuffer::<Luma<u8>, Vec<u8>>::from_pixel(64, 64, Luma([255]));
let image2 = gaussian_blur_f32(&image, 10f32);
assert_pixels_eq_within!(image2, image, 0);
}

#[test]
fn test_gaussian_on_f32_white_idempotent() {
let image = ImageBuffer::<Luma<f32>, Vec<f32>>::from_pixel(64, 64, Luma([1.0]));
let image2 = gaussian_blur_f32(&image, 10f32);
assert_pixels_eq_within!(image2, image, 1e-6);
}
}
44 changes: 26 additions & 18 deletions src/template_matching.rs
Original file line number Diff line number Diff line change
Expand Up @@ -278,7 +278,6 @@ mod tests {
use super::*;
use crate::utils::gray_bench_image;
use image::GrayImage;
use test::{black_box, Bencher};

#[test]
#[should_panic]
Expand Down Expand Up @@ -418,6 +417,32 @@ mod tests {
assert_pixels_eq!(actual, expected);
}

#[test]
fn test_find_extremes() {
let image = gray_image!(
10, 7, 8, 1;
9, 15, 4, 2
);

let expected = Extremes {
max_value: 15,
min_value: 1,
max_value_location: (1, 1),
min_value_location: (3, 0),
};

assert_eq!(find_extremes(&image), expected);
}
}

#[cfg(not(miri))]
#[cfg(test)]
mod benches {
use super::*;
use crate::utils::gray_bench_image;
use image::GrayImage;
use test::{black_box, Bencher};

macro_rules! bench_match_template {
($name:ident, image_size: $s:expr, template_size: $t:expr, method: $m:expr) => {
#[bench]
Expand Down Expand Up @@ -469,21 +494,4 @@ mod tests {
image_size: 100,
template_size: 16,
method: MatchTemplateMethod::SumOfSquaredErrorsNormalized);

#[test]
fn test_find_extremes() {
let image = gray_image!(
10, 7, 8, 1;
9, 15, 4, 2
);

let expected = Extremes {
max_value: 15,
min_value: 1,
max_value_location: (1, 1),
min_value_location: (3, 0),
};

assert_eq!(find_extremes(&image), expected);
}
}

0 comments on commit bf8493f

Please sign in to comment.